Parcelable 複雜對象,對象列表

public static class A implements  Parcelable {
        private B b;
        private List<C> cList = new ArrayList<>();

        protected A(Parcel in) {
            b = in.readParcelable(B.class.getClassLoader());
            in.readTypedList(cList, C.CREATOR);
        }

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

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

        public B getB() {
            return b;
        }

        public void setB(B b) {
            this.b = b;
        }

        public List<C> getCList() {
            return cList;
        }

        public void setCList(List<C> cList) {
            this.cList = cList;
        }

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeParcelable(b, flags);
            dest.writeTypedList(cList);
        }
    }
public class B  implements  Parcelable {
    private String str;
    private int i;
    
    protected B(Parcel in) {
        str = in.readString();
        i = in.readInt();
    }

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

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

    public String getStr) {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(str);
        dest.writeInt(i);
    }
}
public static class C implements Parcelable {
        private String str;
        private B b;

        protected C(Parcel in) {
            str = in.readString();
            b = in.readParcelable(B.class.getClassLoader());
        }

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

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

        public String getStr() {
            return str;
        }

        public void setStr(String str) {
            this. str = str;
        }

        public B getB() {
            return b;
        }

        public void setB(B b) {
            this.b = b;
        }

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(str);
            dest.writeParcelable(b, flags);
        }
    }

Class C中屬性b的序列變化writeToParcel函數中需要寫到str下面,否則會反序列化不出b屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章