You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:07:52