How to pass a parcelable object that contains a list of objects?
If class Product
is compatible with parcelable protocol, following should work according to documentation.
products = new ArrayList<Product>();
in.readList(products, Product.class.getClassLoader());
In my personal experience, http://www.parcelabler.com/ is an amazing site for this. You just create your class, and copy paste it into the website, and it generates a Parcelable version of your class.
I tested it with a class named "Theme" that contained the following variables:
private String name;
private int image;
private List<Card> cards;
The writeToParcel function becomes:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(image);
if (cards == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(cards);
}
}
generated constructor:
protected Theme(Parcel in) {
name = in.readString();
image = in.readInt();
if (in.readByte() == 0x01) {
cards = new ArrayList<Card>();
in.readList(cards, Card.class.getClassLoader());
} else {
cards = null;
}
}
EDIT: make sure that the Card object is also Parcelable!
First, your Product object must implements Parcelable
.
And then, use dest.writeTypedList(products)
in writeToParcel()
method.
Finally, use following code to parse the list:
products = new ArrayList<Product>();
in.readTypedList(products, Product.CREATOR);
For more infomation, please reference the Official Document: