2011-01-24 68 views

回答

9

它可能发生,你的类将有子类,所以在这种情况下,每个孩子可以返回不同的值,所以你会知道哪个特定的对象类型从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()

+8

这个答案是不正确。 'Serializable`方法也可以不使用describeContents()。您使用该值将反序列化的对象投射到MyParent或其某个子类。但是createFromParcel()的返回类型是MyParent,因此您可以在所有情况下简单地将其转换为MyParent,而忽略描述值。 – devconsole 2011-07-30 17:04:20