How to implement Parcelable for a class containing List <List <String>>?

I have a working version of Parcelable for all fields of my Parcelable Class except List<List<String>>

 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]; } }; } 

An exception:

 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 
+8
android parcelable
source share
3 answers

The ArrayList extension and Parcelable implementation on it worked for me.

 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]; } }; } 

and class of employees

 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]; } }; } 
+6
source share

I would create a class that extends List, implements Parcelable in this class. Otherwise, you can think of it as a regular list, but let it be understood.

0
source share

Create a class DetailsEntry implements Parcelable that contains List<String> and use List<DetailsEntry> details in Employee .

0
source share

All Articles