android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。
外,只有实现了Parcelable接口的类才能被放入Parcel中。
那现在我们来看下Parcelable接口实现要点:
1. describeContents方法,只要返回0即可:
public int describeContents() {
return 0;
}
2.writeToParcel方法,该方法是将类中定义的数据写入外面提供的Parcel中,就是将数据保存在Parcel中,Parcel提供了很多的读写方法,
如要写入的数据是String,就用(Parcel)dest.writeString,要写入int就用writeInt,等等:
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(operatorAlphaLong);
dest.writeString(operatorAlphaShort);
dest.writeString(operatorNumeric);
dest.writeSerializable(state);
}
3.Creator方法,该方法要实现两个接口:createFromParcel和newArray。
①createFromParcel(Parcel in)就是从外部Parcel读取数据,来实例化本类,与上面writeToParcel方法中的写入相对应来读取数据
②newArray(int size)就是创建一个size大小的本类数组
public static final Creator<NetworkInfo> CREATOR =
new Creator<NetworkInfo>() {
public NetworkInfo createFromParcel(Parcel in) {
NetworkInfo netInfo = new NetworkInfo(
in.readString(), /*operatorAlphaLong*/
in.readString(), /*operatorAlphaShort*/
in.readString(), /*operatorNumeric*/
(State) in.readSerializable()); /*state*/
//这里要注意顺序与写入的一致
//**************************************************
这里我们常常还有这样的写法:
public Rect createFromParcel(Parcel in) {
//这里的Rect就是实现Parcelable接口的这个类
Rect r = new Rect();
r.left = in.readInt();
r.top = in.readInt();
r.right = in.readInt();
r.bottom = in.readInt();
return r;
}
//**************************************************
return netInfo;
}
public NetworkInfo[] newArray(int size) {
return new NetworkInfo[size];
}
};