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

如何在Intent中传递实现Parcelable接口的Model对象?

实现点击ListView项传递单个Parcelable Model对象

嘿,这事儿其实挺 straightforward 的,我来给你一步步拆解怎么做:

先确认你的Model类Parcelable实现没毛病

虽然你说已经定义好了,但还是贴个标准的实现示例给你核对下,避免因为Parcelable写得有问题导致传参失败:

public class Model implements Parcelable {
    private String name;
    private int age;

    // 普通构造方法
    public Model(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Parcelable专属构造,用来从Parcel里读数据
    protected Model(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // 必须的CREATOR常量,系统用它来创建Model实例
    public static final Creator<Model> CREATOR = new Creator<Model>() {
        @Override
        public Model createFromParcel(Parcel in) {
            return new Model(in);
        }

        @Override
        public Model[] newArray(int size) {
            return new Model[size];
        }
    };

    // 这个方法一般返回0就行,除非你有特殊的文件描述符要处理
    @Override
    public int describeContents() {
        return 0;
    }

    // 把Model的数据写到Parcel里,传递的时候用
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    // 按需加Getter方法,方便后续取数据
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

在MainActivity里处理ListView的点击事件

给你的ListView设置OnItemClickListener,点击时拿到对应位置的Model,塞进Intent里跳转:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 直接从集合里拿点击位置的Model实例
        Model selectedModel = modelList.get(position);
        
        // 创建跳转的Intent,这里假设你要跳到DetailActivity
        Intent intent = new Intent(MainActivity.this, DetailActivity.class);
        // 用putExtra传递Parcelable对象,第一个参数是自定义的key,记得和接收端保持一致
        intent.putExtra("SELECTED_MODEL", selectedModel);
        
        // 启动目标Activity
        startActivity(intent);
    }
});

在目标Activity里接收传递过来的Model

比如在DetailActivity的onCreate方法里,把Intent里的Model取出来用:

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

    // 先判断Intent不为空,避免空指针
    if (getIntent() != null) {
        // 用getParcelableExtra取出对象,key要和传递时的一致
        Model receivedModel = getIntent().getParcelableExtra("SELECTED_MODEL");
        
        // 拿到对象后就可以展示数据啦
        if (receivedModel != null) {
            TextView tvName = findViewById(R.id.tv_name);
            TextView tvAge = findViewById(R.id.tv_age);
            tvName.setText(receivedModel.getName());
            tvAge.setText(String.valueOf(receivedModel.getAge()));
        }
    }
}

几个小提醒

  • 传递和接收时用的key(比如上面的SELECTED_MODEL)一定要完全一致,不然会取不到数据哦。
  • 如果你的Model里有嵌套的复杂对象(比如其他Parcelable、List),一定要确保这些对象也正确实现了Parcelable,并且在writeToParcel和构造方法里正确读写数据。

内容的提问来源于stack exchange,提问作者Den

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:14