studio pass example describecontents activities android android-intent parcelable

android - pass - Hacer ArrayList de objetos personalizados parcelable



parcelable describecontents (1)

Utilice writeTypedList y readTypedList .

parcel.writeTypedList(yourList);

y

parcel.readTypedList(yourList, YourParcelable.CREATOR);

Observe cómo pasa el CREADOR como argumento para leer la lista.

Tengo dos clases que crean Objetos que necesito pasar a través de intentos, actualmente estoy intentando 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 las pruebas hasta ahora, mi objeto Item parece transferir información correctamente cuando lo agrupo.

Sin embargo, mi Diner de segunda clase contiene una 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; } }