java - 正确的整数未通过 PutExtra 传递

标签 java android android-studio

我的程序显示一排水平滑动的按钮,其中包含艺术品的文本描述。单击按钮时,ImageActivity 会启动以显示相应的艺术作品。但是,当我单击任何文本按钮时,它总是显示数组中的最后一幅画。

我正在尝试将 int ID 传递给第二个 Activity ,以便在单击相应的描述后它将显示正确的绘画。

谢谢!

这是我的主要 Activity :

import android.content.Intent;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

    //CONTAINING PAINTINGS
    private LinearLayout mLinearList;
    private String id;
    private Painting painting;

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

        //REFERENCE THE SCROLLABLE LAYOUT STRUCTURE IN MAIN_SCREEN.XML
        mLinearList = (LinearLayout) findViewById(R.id.linearList);

        //FILL THE SCROLLABLE LAYOUT STRUCTURE WITH PAINTINGS
        fillTextCarousel();

    }

    private void fillTextCarousel() {

        // POPULATE THE LINEAR LIST CAROUSEL WITH PAINTINGS AND DESCRIPTIONS
        Button buttonItem;

        for (int i = 0; i < RenaissanceDatabase.description.length; i++) {
            //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS
            buttonItem = new Button(this);


            painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]);

            //USE THE CONTENT DESCRIPTION PROPERTY TO STORE
            //PAINTING DATA

            buttonItem.setContentDescription(painting.getDescription());
            buttonItem.setText(painting.getDescription());

            //SET AN ONCLICK LISTENER FOR THE TEXT BUTTON
            buttonItem.setOnClickListener(displayPainting);

            //ADD THE IMAGE BUTTON TO THE SCROLLABLE LINEAR LIST
            mLinearList.addView(buttonItem);
        }
    }

    private View.OnClickListener displayPainting = new View.OnClickListener() {
         public void onClick(View btn) {
         // COLLECT THE IMAGE STORED FOR THE PAINTING
             //String Painting_ID = Integer.toString(painting.getId());
             Intent imgIntent = new Intent(getApplicationContext(), ImageActivity.class);
             imgIntent.setAction(imgIntent.ACTION_SEND);
             imgIntent.putExtra("image_id", painting.getId());
             startActivity(imgIntent);

         }
    };

我试图将整数 ID 传递给的 ImageActivity:

public class ImageActivity extends Activity {

private Painting painting;
private int index;
private int[] IDs;
private String[] Desc;

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

    Intent objIntent = getIntent();
    int ID_Val = objIntent.getIntExtra("image_id", 0);
    ImageView art = (ImageView) findViewById(R.id.imageView2);
    art.setImageResource(ID_Val);
}

}

还有绘画数据库,我从中获取 ID:

public class RenaissanceDatabase {

    public static String description[] = {
            "Venus of Urbino\nTitan, 1538",
            "St. John the Baptist\nLeonardo da Vinci, 1516",
            "Protrait of Baldassare Castiglione\nRaphael, 1515",
            "The Entombent of Christ\nCaravaggio, 1603",
            "Coronation of the Virgin\nFra Angelico, 1435",
            "Mars and Venus\n Sandro Bottcelli, 1483"};

    public static int id[] = {
            R.drawable.painting1, // VENUS OF URBINO
            R.drawable.painting2, // ST.JOHN BAPTIST
            R.drawable.painting3, // BALDASSARE
            R.drawable.painting4, // ENTOMBENT OF CHRIST
            R.drawable.painting5, // CORONOATION
            R.drawable.painting6  // MARS AND VENUS
    };
}

最佳答案

为 for 循环中的每个 按钮 设置 id -

for (int i = 0; i < RenaissanceDatabase.description.length; i++) {
            //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS
            buttonItem = new Button(this);


            painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]);

            //USE THE CONTENT DESCRIPTION PROPERTY TO STORE
            //PAINTING DATA

            buttonItem.setId(painting.getId());
....
        }
    }

然后更改您的OnClickListener -

private View.OnClickListener displayPainting = new View.OnClickListener() {
         public void onClick(View btn) {
    ....
             imgIntent.putExtra("image_id", btn.getId());
             startActivity(imgIntent);

         }
    };

关于java - 正确的整数未通过 PutExtra 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36143316/

相关文章:

java - 在java中按需创建数组

java - 如何在 Hibernate 中将 map 保存在 map 内?

android - 从 PHONE_STATE Intent 操作中读取数字 android 9 不工作

java - 按下后退按钮时使用 MainActivity 登录 Activity

android - 无法在 Android Studio 0.3.5 中导入模块

java - 从时间戳中剥离时间

java - 当使用 new 运算符创建对象时,如何在 spring 中注入(inject)依赖项?

android - findFragmentById() 和 findFragmentByTag()

android studio res/菜单崩溃

android - 使用 Lombok 注释库的 Proguard 构建失败