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

Android中使用Parcelable传输CardView对象数组时属性值丢失问题

问题原因分析

嘿,我一眼就看出问题所在啦!你的CardView类虽然实现了Parcelable接口,但没有完成核心的序列化与反序列化逻辑——既没把number属性写入到Parcel容器里,也没在重建对象时从Parcel中读取这个值,导致传递后的对象number只能是int类型的默认值0。

修正方案

我们只需要补全Parcelable的关键逻辑,就能让number属性正确传递:

1. 完善writeToParcel方法

这个方法负责把对象的属性写入Parcel,添加写入number的代码:

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeInt(number); // 将number存入Parcel
}

2. 完善Parcel构造函数

这个构造函数负责从Parcel中读取保存的属性,重建CardView对象:

protected CardView(Parcel in) {
    number = in.readInt(); // 从Parcel中取出之前保存的number值
}
修正后的完整CardView类
public class CardView implements Parcelable {
    int number;

    public CardView(int number){
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    protected CardView(Parcel in) {
        number = in.readInt(); // 读取保存的number
    }

    public static final Creator<CardView> CREATOR = new Creator<CardView>() {
        @Override
        public CardView createFromParcel(Parcel in) {
            return new CardView(in);
        }

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

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(number); // 写入number到Parcel
    }
}
验证

修改完成后再运行代码,MainActivity2里调用((CardView)list.get(0)).getNumber()就能返回你初始化时设置的10了,其他对象的number值也能正确传递~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:59:31