He creado una Parcelable
continuación objeto, mi objeto contiene una List
de los productos. En mi constructor, ¿cómo puedo volver a crear mi Parcelable
para el List
?
He comprobado todos los métodos disponibles en el paquete y todo lo que está disponible es readArrayList(ClassLoader)
. No estoy seguro de si este es el mejor enfoque, su consejo sería muy apreciado.
public class Outfits implements Parcelable {
private String url;
private String name;
private List<Product> products;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public void writeToParcel(Parcel dest, int flags) {
Log.v("", "writeToParcel..." + flags);
dest.writeString(url);
dest.writeString(name);
dest.writeList(products);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Outfits createFromParcel(Parcel in) {
return new Outfits(in);
}
public Outfits[] newArray(int size) {
return new Outfits[size];
}
};
@Override
public int describeContents() {
return 0;
}
/*** Here how do I populate my List of Products ***/
private Outfits(Parcel in) {
url = in.readString();
name = in.readString();
products = in.read ???????;
}
}
readList()
?Respuestas:
Si la clase
Product
es compatible con el protocolo parcelable, lo siguiente debería funcionar de acuerdo con la documentación.fuente
writeList()
escribirán objetos de acuerdo con las especificaciones descritas porwriteValue()
método. developer.android.com/reference/android/os/… Entre otras cosas, dice que el objeto puede ser serializable.readList()
es contrapartewriteList()
y leerá los mismos datos.in.readList(products,null);
, obteniendo excepciones como ... Causado por: android.os.BadParcelableException: ClassNotFoundException al desagrupar: com.example.MyApplication.Product. La variación para leer la lista que realmente me funciona esin.readList(products,Product.class.getClassLoader());
Primero, su objeto Producto debe implementarse
Parcelable
.Y luego, use
dest.writeTypedList(products)
enwriteToParcel()
método.Finalmente, use el siguiente código para analizar la lista:
Para obtener más información, consulte el documento oficial :
fuente
En mi experiencia personal, http://www.parcelabler.com/ es un sitio increíble para esto. Simplemente cree su clase, cópiela y péguela en el sitio web, y generará una versión Parcelable de su clase.
Lo probé con una clase llamada "Tema" que contenía las siguientes variables:
La función writeToParcel se convierte en:
constructor generado:
EDITAR: ¡asegúrese de que el objeto Tarjeta también sea Parcelable!
fuente
Esto debería funcionar:
fuente
products = new ArrayList<Product>(); in.readList(products, Product.class.getClassLoader());
implementar también
Parcelable
en la clase Product y luegoin.readList(this.list, Product.class.getClassLoader());
si alguna de las soluciones anteriores no funcionó.
fuente
La otra forma es usar readValue y writeValue .
Los elementos de la lista deben implementar Parcelable
fuente
Aqui tienes...
Asegúrese de que "Products.java" se debe ampliar con Parcelable
Paso 1:
Paso 2:
Paso 3:
fuente
Suponiendo que se
Product
está implementandoParcelable
, puede usar esto para escribir:y esto para leer:
fuente
El producto debe ser implementos Parcelable
Luego escribe que el objeto contiene una lista como
fuente