Activity之间通过intent传递object时,该object的class需要实现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() {
//一般返回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
最核心的地方是
private MyParcelable(Parcel in)
和
writeToParcel(Parcel out, int flags)
读写顺序要一致。
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);
}
}