Ответ 1
Может случиться так, что ваш класс будет иметь дочерние классы, поэтому каждый из них в этом случае может возвращать в describeContent()
разные значения, поэтому вы должны знать, какой конкретный тип объекта следует создать из 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()