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:
- Escribir enum con String a paquete
- Android Store un objeto parcelable en SQLite
- Parcelable y herencia en Android
- Envío de la lista de objetos del array entre actividades con Parcelable
- ¿Un objeto serializable siempre se serializa cuando se pone en un paquete?
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
- ¿Por qué algunas veces funciona guardar un Hashtable de objetos no Parcelable en onSaveInstanceState ()?
- ¿Existe una manera conveniente de crear clases de datos Parcelable en Android con Kotlin?
- Crear una copia del objeto de parcela
- Poner un objeto en el mensaje de Handler
- Android parcelable referenciando otra dependencia circular parcelable
- Android: pasar el objeto del widget de recopilación a la actividad
- Android: pasar la lista <GeoPoint> a otra actividad
- Android Parcelable y Serializable
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
.
- Hacer una actividad particular como actividad de raíz en la pila
- Suscribir temas con el token de Google Cloud Messenger, argumento inválido recibido