根据按下按钮更改不同活动中的ImageView

时间:2015-11-19 16:59:31

标签: java android android-intent android-studio imageview

我正在创建一个用户可以选择设计的应用程序,然后在下一页中输入他们的详细信息。目前,用户可以选择多种设计,然后根据他们选择的设计,该设计将在下一页显示为预览。为了避免每个设计都有一个单独的java类,我希望有一个类可以改变预览图像,具体取决于用户选择的设计。

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

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));

现在,我理解为什么只有一张图片被传递到下一个活动。代码正在按顺序读取,因此它会读取它读取的最后一个值(我想我在这里是正确的)。但我不知道如何根据用户选择的图像来改变图像。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您必须为图像资源额外定义一个键,例如:

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

你做错的事情就是使用不同的键来表示你希望传递给下一个活动的额外一个。您需要更改一个可绘制的图像视图,因此请使用一个额外的密钥,始终使用相同的密钥检索,只需在第一个活动中使用此密钥放置不同的内容。

答案 1 :(得分:0)

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

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

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, "");