He creado una Parcelablecontinuación objeto, mi objeto contiene una Listde los productos. En mi constructor, ¿cómo puedo volver a crear mi Parcelablepara 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
Productes 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
Parcelableen 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
Productestá 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