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
相关产品推荐
相关产品推荐

