我想知道如何通过gridView.setOnItemClickListener()中的intent()传递ArrayList数据并在ShowTracksActivity.java中获取它。怎么可能?
MainActivity.java
ArrayList<Artist>artists = new ArrayList<Artist>();
// Artist 1
String[] artist_title = new String[]{ "Title 1", "Title 2","Title 3", "Title 4" };
artists.add(new Artist("Artist Name", "Album Name", "img_album", artist_title ));
// Artist 2
//...
ArtistAdapter adapter = new ArtistAdapter(this, artists);
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new GridView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Intent ShowTrackIntent = new Intent(MainActivity.this, ShowTracksActivity.class);
// Here ?
// ShowTrackIntent.putExtra( ??? );
startActivity(ShowTrackIntent);
}
});
ShowTracksActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ???
}
感谢您的帮助。
最佳答案
好的,这就是想法,当您单击艺术家时,您会在单击监听器中获得该单元格的位置,因此现在您必须使用该位置并从该位置的艺术家列表中取出该艺术家。并通过 Intent 传递它,在 android 中传递用户定义的数据/对象,您需要使它们可序列化或可打包。 你可以引用这个question
Intent/Bundle 类也具有在 Activity 之间传递此类数据的方法。
示例代码:
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
intent.putExtra(key, value); // Here key would be String and value can be either Parcelable or Serializable
startActivity(intent);
在您的项目中点击监听器的情况:
Artist artist = artists.get(postion);
Intent intent = new Intent(MainActivity.this, ShowTracksActivity.class);
intent.putExtra("selected_artist", artist); // Here key would be String and value can be either Parcelable or Serializable
startActivity(intent);
注意:您必须使您的 Artist 类可序列化才能将其传递给其他 Activity ,有关如何做到这一点,您可以引用此 Why use parcelable? , How To make class parcelable?和 The easy and dirty way
关于java - 如何通过gridView.setOnItemClickListener()中的intent()传递ArrayList数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49401458/