如何为包含List <List <String >>的类实现Parcelable?

除了List<List<String>>之外,我的Parcelable Class中的所有字段都有Parcelable实现

 class Employee implements Parcelable { List<List<String>> details; //....... protected Employee(Parcel in) { details = new ArrayList<List<String>>(); // i know this is wrong just posting to clarify in.readList(details, List.class.getClassLoader()); //...... } public void writeToParcel(Parcel dest, int flags) { dest.writeList(details); //..... } public int describeContents() { return 0; } public static final Parcelable.Creator<Employee> CREATOR = new Parcelable.Creator<Employee>() { public Employee createFromParcel(Parcel in) { return new Employee(in); } public Employee[] newArray(int size) { return new Employee[size]; } }; } 

例外:

 05-10 19:07:44.072: E/AndroidRuntime(10661): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@42a509e8: Unmarshalling unknown type code 3604535 at offset 268 

Solutions Collecting From Web of "如何为包含List <List <String >>的类实现Parcelable?"

扩展ArrayList并在其上实现Parcelable为我工作。

 public class ParcelableArrayList extends ArrayList<String> implements Parcelable { private static final long serialVersionUID = -8516873361351845306L; public ParcelableArrayList(){ super(); } protected ParcelableArrayList(Parcel in) { in.readList(this, String.class.getClassLoader()); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(this); } public static final Parcelable.Creator<ParcelableArrayList> CREATOR = new Parcelable.Creator<ParcelableArrayList>() { public ParcelableArrayList createFromParcel(Parcel in) { return new ParcelableArrayList(in); } public ParcelableArrayList[] newArray(int size) { return new ParcelableArrayList[size]; } }; } 

和Employee类

 class Employee implements Parcelable { List<ParcelableArrayList> details; //....... protected Employee(Parcel in) { details = new ArrayList<ParcelableArrayList>(); in.readTypedList(details,ParcelableArrayList.CREATOR); //...... } public void writeToParcel(Parcel dest, int flags) { dest.writeList(details); //..... } public int describeContents() { return 0; } public static final Parcelable.Creator<Employee> CREATOR = new Parcelable.Creator<Employee>() { public Employee createFromParcel(Parcel in) { return new Employee(in); } public Employee[] newArray(int size) { return new Employee[size]; } }; } 

我将创build一个扩展List的类,在该类上实现Parcelable。 否则,可以将其视为正常列表,但允许它可以被分类。

创buildclass DetailsEntry implements Parcelable包含List<String> List<DetailsEntry> details并在Employee使用List<DetailsEntry> details