【问题标题】:Change ImageView in different activity dependent on button press根据按钮按下更改不同活动中的 ImageView
【发布时间】:2015-11-19 16:59:31
【问题描述】:

我正在制作一个应用程序,用户可以在其中选择一种设计,然后在下一页中输入他们的详细信息。就目前而言,用户可以选择多种设计,然后根据他们选择的设计,该设计将在下一页中显示为预览。为了避免每个设计都有一个单独的 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));

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

【问题讨论】:

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


    【解决方案1】:

    看起来您的第一个问题是您在函数 getIntExtra() 中提供了默认值作为实际资源 ID。这意味着如果 Intent 查询 feild "Value hen parameter" 并发现它为空,它仍然会返回默认值。除此之外,我认为您使用 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, "");
    

    【讨论】:

      【解决方案2】:

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

      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 的可绘制对象,因此请使用一个额外的键,始终使用相同的键检索,只需在第一个 Activity 中使用此键放置不同的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多