Android新手求助:如何通过putExtra传递ListView选中项数据至DetailActivity
解决ListView选中项数据传递到DetailActivity的方案
嘿,作为Android新手碰到这个问题太正常啦!我来一步步带你搞定把选中的ListData数据传到详情页的事儿~
步骤1:给ListView设置Item点击事件
首先你得在ListView所在的Activity(或Fragment)里,给ListView设置OnItemClickListener,这样用户点击某个Item时,就能拿到对应的位置和数据对象。假设你有一个存储所有ListData的数据源,比如ArrayList<ListData> mDataList,代码可以这么写:
ListView listView = findViewById(R.id.your_listview_id); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取选中位置的ListData对象 ListData selectedData = mDataList.get(position); // 接下来就是把这个对象传到DetailActivity啦,往下看👇 } });
步骤2:让ListData类实现Parcelable接口
因为Intent没法直接传递普通的自定义对象,所以咱们得让ListData实现Parcelable接口(推荐用这个,比Serializable效率高)。修改你的ListData类:
import android.os.Parcel; import android.os.Parcelable; public class ListData implements Parcelable { private String title; private String desc; public ListData(String title, String desc) { this.title = title; this.desc = desc; } // 从Parcel中读取数据的构造函数 protected ListData(Parcel in) { title = in.readString(); desc = in.readString(); } // 必须实现的CREATOR常量 public static final Creator<ListData> CREATOR = new Creator<ListData>() { @Override public ListData createFromParcel(Parcel in) { return new ListData(in); } @Override public ListData[] newArray(int size) { return new ListData[size]; } }; public String getTitle() { return title; } public String getDesc() { return desc; } // 把数据写入Parcel @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(title); dest.writeString(desc); } // 这里返回0就行,除非你有特殊需求 @Override public int describeContents() { return 0; } }
步骤3:通过Intent传递数据到DetailActivity
回到刚才的Item点击事件里,现在可以用Intent把选中的selectedData传过去了:
// 创建Intent,指定从当前Activity跳转到DetailActivity Intent intent = new Intent(CurrentActivity.this, DetailActivity.class); // 把Parcelable对象放入Intent,第二个参数是自定义的key,后面要用来取数据 intent.putExtra("SELECTED_LIST_DATA", selectedData); // 启动DetailActivity startActivity(intent);
步骤4:在DetailActivity中接收并展示数据
最后一步,在DetailActivity的onCreate方法里,从Intent中取出传递过来的ListData对象,然后展示到UI上:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // 获取Intent Intent intent = getIntent(); if (intent != null) { // 通过刚才的key取出ListData对象 ListData selectedData = intent.getParcelableExtra("SELECTED_LIST_DATA"); // 找到你用来展示标题和描述的TextView TextView titleTv = findViewById(R.id.tv_title); TextView descTv = findViewById(R.id.tv_desc); // 设置文本内容 if (selectedData != null) { titleTv.setText(selectedData.getTitle()); descTv.setText(selectedData.getDesc()); } } }
这样一套流程走下来,你点击ListView的任意Item,就能把对应的数据传到DetailActivity展示啦~如果还有不清楚的地方,随时问哦!
内容的提问来源于stack exchange,提问作者Nanda Febrian A
相关产品推荐
相关产品推荐

