57
可能重复:
Parcelable where/when is describeContents() used?目的describeContents的()
什么是实现describeContents(Parcelable接口)功能的目的是什么?大多数框架代码返回0作为实现。文档说“一个位掩码表示由Parcelable编组的特殊对象类型集合。”可能有人解释了这个功能(可能举一个例子)
可能重复:
Parcelable where/when is describeContents() used?目的describeContents的()
什么是实现describeContents(Parcelable接口)功能的目的是什么?大多数框架代码返回0作为实现。文档说“一个位掩码表示由Parcelable编组的特殊对象类型集合。”可能有人解释了这个功能(可能举一个例子)
它可能发生,你的类将有子类,所以在这种情况下,每个孩子可以返回不同的值,所以你会知道哪个特定的对象类型从Parcel
创建。比如喜欢这里 - 示例实现的父类Parcelable
方法(MyParent
)的:
//************************************************
// Parcelable methods
//************************************************
//need to be overwritten in child classes
//MyChild_1 - return 1 and MyChild_2 - return 2
public int describeContents() {return 0;}
public void writeToParcel(Parcel out, int flags)
{
out.writeInt(this.describeContents());
out.writeSerializable(this);
}
public Parcelable.Creator<MyParent> CREATOR
= new Parcelable.Creator<MyParent>()
{
public MyParent createFromParcel(Parcel in)
{
int description=in.readInt();
Serializable s=in.readSerializable();
switch(description)
{
case 1:
return (MyChild_1)s;
case 2:
return (MyChild_2)s;
default:
return (MyParent)s;
}
}
public MyParent[] newArray(int size)
{
return new MyParent[size];
}
};
在这种情况下,一个并不需要实现子类中的所有Parcelable
方法 - 除了describeContent()
这个答案是不正确。 'Serializable`方法也可以不使用describeContents()。您使用该值将反序列化的对象投射到MyParent或其某个子类。但是createFromParcel()的返回类型是MyParent,因此您可以在所有情况下简单地将其转换为MyParent,而忽略描述值。 – devconsole 2011-07-30 17:04:20