I have created a Parcelable
object below, my object contains a List
of Products. In my constructor how do I handle re-creating my Parcelable
for the List
?
I have checked all of the methods available from the parcel and all that is available is readArrayList(ClassLoader)
. I'm not sure if this is the best approach, your advice would really be appreciated.
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 ???????;
}
}
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:
The writeToParcel function becomes:
generated constructor:
EDIT: make sure that the Card object is also Parcelable!
The other way is to use readValue&writeValue.
Items of the list should implement Parcelable
If class
Product
is compatible with parcelable protocol, following should work according to documentation.First, your Product object must implements
Parcelable
.And then, use
dest.writeTypedList(products)
inwriteToParcel()
method.Finally, use following code to parse the list:
For more infomation, please reference the Official Document:
This should work:
implement
Parcelable
on the Product class as well and thenin.readList(this.list, Product.class.getClassLoader());
if any of the above solutions didn't work.