更改ImageView在不同的活动依赖于按钮按

问题描述:

我正在做一个应用程序,用户可以选择一个设计,然后在下一页输入他们的详细信息。现在,用户可以选择多种设计,然后根据他们选择的设计,该设计将显示为下一页中的预览。为了避免为每个设计分配一个java类,我希望有一个类可以更改预览图像,具体取决于用户选择的设计。更改ImageView在不同的活动依赖于按钮按

目前,我可以更改第二个活动中显示的图像,但无法将图像更改为用户选择的特定设计。

This is what the page looks like where the user chooses their design (named SelectDesign.java)

This is what the preview page looks like (named GarmentEntry.java)

下面是他们选择设计该活动的代码 - SelectDesign.java(我只是为了简单起见前三设计 - 它们都具有相同的基本轮廓)

package com.example.joe.printedclothing; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class SelectDesign extends AppCompatActivity { 

private static Button HenCockButton, CocktailHenButton, ValueHenButton, XAngelsButton, AlcDisposal, LastNightOfFreedom, BeaverPatrol, Paraletic, FellasOnTour, ValueStag, Wolfpack, PhotoStagHen; 
ImageView imagePreviewButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.select_design); 

    HenCockButton = (Button) findViewById(R.id.hencocksthumbB); 
    HenCockButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent henCockIntent = new Intent(SelectDesign.this, GarmentEntry.class); 
      henCockIntent.putExtra("hen cock parameter", R.drawable.onehenthreechicks); 
      startActivity(henCockIntent); 
     } 
    }); 

    CocktailHenButton = (Button) findViewById(R.id.cocktailhenthumb); 
    CocktailHenButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent cocktailHenIntent = new Intent(SelectDesign.this, GarmentEntry.class); 
      cocktailHenIntent.putExtra("cocktail hen parameter", R.drawable.cocktailhen); 
      startActivity(cocktailHenIntent); 
     } 
    }); 

    ValueHenButton = (Button) findViewById(R.id.valuehenthumb); 
    ValueHenButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent valueHenIntent = new Intent(SelectDesign.this, GarmentEntry.class); 
      valueHenIntent.putExtra("Value Hen parameter", R.drawable.valuehen); 
      startActivity(valueHenIntent); 

     } 
    }); 

下面是他们进入他们的详细资料,并有一个预览活动的代码 - GarmentEntry.java(不包括的东西像纺纱和按钮的代码)

package com.example.joe.printedclothing; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Spinner; 

public class GarmentEntry extends AppCompatActivity { 

Spinner tcshenspinner, backprintoptionsspinner, tcbackhenspinner, cosspinner, ppspinner; 
ArrayAdapter<CharSequence> tcshenspinneradapter, backprintoptionsspinneradapter, tcbackhenspinneradapter, cosspinneradapter, ppspinneradapter; 
Button nextButton1; 
public static ImageView imagePreview; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.garment_entry); 

    imagePreview = (ImageView) findViewById(R.id.imagePreview); 
    // Hen cocks 
    imagePreview.setImageResource(getIntent().getIntExtra("hen cock parameter", R.drawable.onehenthreechicks)); 
    // Cocktail hen 
    imagePreview.setImageResource(getIntent().getIntExtra("cocktail hen parameter", R.drawable.cocktailhen)); 
    // Value hen 
    imagePreview.setImageResource(getIntent().getIntExtra("Value Hen parameter", R.drawable.valuehen)); 

现在,我明白了为什么只有一个图像被传递到下一个活动。代码被顺序读取,所以它读取最后一个值(我认为我在这里是正确的)。但我不知道如何使图像更改取决于用户选择的图像。任何帮助将不胜感激!

它看起来像你的第一个问题是你提供的默认值作为函数getIntExtra()中的实际资源ID。这意味着如果Intent被查询为feild“Value hen parameter”并且发现它为空,它仍然会返回默认值。除此之外,我认为你使用Intent extra的方法是正确的,但是你错误地使用了它。

一个更好的想法是为意图设置一个键,谁的价值将是您想要在第二个活动中显示的图像。例如

public static final String IMAGE_RES_ID = "image_res_id"; 
private Intent intent = new Intent(SelectDesign.this, GarmentEntry.class); 
    .... 
    .... 
    .... 
    CocktailHenButton.setOnClick(
     .... 
     intent.putExtra(IMAGE_RES_ID, R.drawable.cocktailhen); 
     startActivity(intent); 
    } 

    ValueHenButon.setOnClick(
     .... 
     intent.putExtra(IMAGE_RES_ID, R.drawable.valuehen); 
     startActivity(intent); 

,然后在GarmetEntry.class,使用单个语句来填充图像:

imagePreview.setImageResource(getIntent().getIntExtra(SelectDesign.IMAGE_RES_ID, ""); 

你必须定义图像资源的一个关键的额外费用,如:

public static final String RESOURCE_EXTRA = "resource_extra"; 

用它来你的资源额外传递给意图启动活动:

henCockIntent.putExtra(RESOURCE_EXTRA, R.drawable.onehenthreechicks); 

而在第二个活动,使用此密钥检索资源ID:

imagePreview = (ImageView) findViewById(R.id.imagePreview); 

imagePreview.setImageResource(getIntent().getIntExtra(RESOURCE_EXTRA, R.drawable.valuehen)); // of course the default drawable id could be different 

您做错了事情是使用不同的您希望传递给下一个活动的额外密钥。有一个imageView需要更改drawable,所以使用一个额外的键,总是用同一个键检索,只需在第一个活动中使用此键放置不同的东西。