正确的整数没有通过PutExtra传递

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

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

谢谢!

这是我的MainActivity:

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循环中的每个button设置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); } }; 

您的代码设置方式非常有意义。

看看你用来配置一切的循环。

 for (int i = 0; i < RenaissanceDatabase.description.length; i++) { ..... painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]); ... } 

在这个循环结束时绘画的价值是什么? 这是数组中最后一个位置的任何内容。

现在看看你的代码传递ID:

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

所呈现的代码从未将“当前绘画”更新为被触摸的代码。 您需要弄清楚用户触摸了哪种绘画,并使用该绘画的ID。

另一个答案建议将buttonId设置为绘画的id - 这有一些问题,所以我不会亲自推荐。

相反,我会使用Adapter和ViewHolder模式,并利用视图来包含此元数据。 这是一个更具伸缩性的解决方案。