Implement Parcelable

When passing an object between activities through an intent, the class of the object needs to implement Parcelable.

 

Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a non-null static field called CREATOR of a type that implements the Parcelable.Creator interface.

A typical implementation of Parcelable is:

public class MyParcelable implements Parcelable {
    private int mData;

    public int describeContents() {
        // generally return 0
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mData);
    }

    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    private MyParcelable(Parcel in) {
        mData = in.readInt();
    }
}

 http://developer.android.com/reference/android/os/Parcelable.html

 

The most important place is

private MyParcelable(Parcel in)

and

writeToParcel(Parcel out, int flags)

The read and write order must be consistent.

 

public class Bill implements Parcelable {
    Integer fee;
    String title;
    Boolean result;

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(fee);
        out.writeString(title);
        out.writeByte((byte) (result!=null && result ? 1 : 0));
    }

    public static final Parcelable.Creator<Bill> CREATOR = new Parcelable.Creator<Bill>() {
        public Bill createFromParcel(Parcel in) {
            return new Bill(in);
        }

        public Bill[] newArray(int size) {
            return new Bill[size];
        }
    };

    private Bill(Parcel in) {
        fee = in.readInt();
        title = in.readString();
        result = (in.readByte()==1);
    }
}

 

 

 

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327055121&siteId=291194637