Cómo implementar Parcelable para una clase que contenga List <List <String>?

Tengo una implementación operativa Parcelable para todos los campos de mi Clase Parcelable aparte de 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]; } }; } 

Excepción:

 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 

Extender ArrayList y la implementación de Parcelable en él trabajó para mí.

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

Y clase de empleado

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

Crearía una clase que extienda List, implemente Parcelable en esa clase. De otra manera puede tratarlo como una lista normal, pero permita que sea parcelable.

Crear class DetailsEntry implements Parcelable que contiene List<String> y utilizar List<DetailsEntry> details en Employee .

  • ¿Cómo escribir Java.util.Map en el paquete de una manera inteligente?
  • Fragmentos de Android que conservan datos
  • Beneficio de usar Parcelable en lugar de serializar objetos
  • Problema de desacoplamiento de parcelables
  • ¿Cómo puedo recuperar de un paquete una secuencia de caracteres que se guardó utilizando TextUtils.writeToParcel (...)?
  • No se puede guardar ArrayList de Uri en un archivo: NotSerializableException
  • Casting objetos a subclases de una superclase Parcelable?
  • ¿Qué cargador de clases usar con Parcel.readHashMap?
  • Edición Parcelable de Android
  • ¿Cómo ordenar y unmarshall un parcelable a un arsenal del byte con la ayuda del paquete?
  • List <String> readStringArray en Parcelable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.