Hacer ArrayList de objetos personalizados parcelable
Tengo dos clases que crean objetos que necesito pasar a través de intentos, estoy intentando actualmente implementar Parcelable para hacer esto.
import android.os.Parcel; import android.os.Parcelable; public class Item implements Parcelable { private String name; private double price; private int buyerCount = 0; public Item(String name, double price) { this.name = name; this.price = price; } private Item(Parcel in) { name = in.readString(); price = in.readDouble(); } public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() { public Item createFromParcel(Parcel in) { return new Item(in); } public Item[] newArray(int size) { return new Item[size]; } }; @Override public int describeContents() { return 0; } public double getPrice() { return price; } public int getBuyerCount() { return buyerCount; } public void incrementBuyerCount() { buyerCount += 1; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeDouble(price); } }
Desde la prueba hasta ahora, mi objeto Item parece transferir información correctamente cuando lo agrupo.
- List <String> readStringArray en Parcelable
- Agregando parcelable a una clase de interfaz para objetos personalizados
- Prueba de la unidad Android: Bundle / Parcelable
- GetParcelableArrayList devuelve null
- Ampliación de una clase que implementa Parcelable
Sin embargo, mi Diner de segunda clase contiene un ArrayList de objetos Item y no estoy seguro de cómo implementar correctamente Parcelable en esta clase, específicamente en las partes donde he comentado. Veo que hay un método readParsableArray () pero nada para ArrayLists.
import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; public class Diner implements Parcelable { private String name; private ArrayList<Item> itemList = new ArrayList<Item>(); public Diner(String name) { this.name = name; } private Diner(Parcel in) { name = in.readString(); // How to read in ArrayList itemList of item objects? itemList = in.readParcelableArray(); } public static final Parcelable.Creator<Diner> CREATOR = new Parcelable.Creator<Diner>() { public Diner createFromParcel(Parcel in) { return new Diner(in); } public Diner[] newArray(int size) { return new Diner[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); // How to write ArrayList itemList of item objects? dest.writeParcelableArray(itemList); } public void addItem(Item foodItem) { itemList.add(foodItem); foodItem.incrementBuyerCount(); } public double getPrice() { double total = 0; for(Item item : itemList) { total += item.getPrice() / item.getBuyerCount(); } return total; } public String toString() { return name; } }
- Implementación parcelable con ArrayList <objeto personalizado>
- No se puede guardar ArrayList de Uri en un archivo: NotSerializableException
- ClassNotFoundException cuando unmarshalling y realmente no sé por qué
- Android: Cualquier acceso directo a Serializable de Parcelable sin usar marshall ()?
- Leer y escribir arreglos de objetos parcelables
- Cómo pasar Drawable usando Parcelable
- No entiendo por qué se produce esta ClassCastException
- ¿Está utilizando Serializable en Android mal?
Utilice writeTypedList y readTypedList
.
parcel.writeTypedList(yourList);
y
parcel.readTypedList(yourList, YourParcelable.CREATOR);
Observe cómo pasar en el CREADOR como un argumento para leer la lista de nuevo.
- Cómo publicar un mensaje en facebook friends wall en Android
- Usando setScale y setTranslate (Matrix)