如何传递一个包含对象列表的可放样对象?

我在下面创build了一个Parcelable对象,我的对象包含一个产品List 。 在我的构造函数中,如何处理为List重新创build我的Parcelable

我已经检查了所有可用的包裹方法,所有可用的方法是readArrayList(ClassLoader) 。 我不确定这是否是最好的方法,您的意见将真正赞赏。

 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 ???????; } } 

Solutions Collecting From Web of "如何传递一个包含对象列表的可放样对象?"

如果类Product与Parcelable协议兼容,则按照文档进行操作。

 products = new ArrayList<Product>(); in.readList(products,null); 

首先,您的Product对象必须实现Parcelable

然后,在writeToParcel()方法中使用dest.writeTypedList(products)

最后,使用下面的代码来parsing列表:

 products = new ArrayList<Product>(); in.readTypedList(products, Product.CREATOR); 

欲了解更多信息,请参考官方文件 :

这应该工作:

 in.readTypedList(products, Product.CREATOR); 

然后在Product类上实现Parcelable

in.readList(this.list, Product.class.getClassLoader());

如果上述任何解决scheme不起作用。

另一种方法是使用readValue & writeValue 。

 protected Product (Parcel in) { ... in.readValue(this.getClass().getClassLoader()); } @Override public void writeToParcel(Parcel parcel, int i) { ... parcel.writeValue(**list**); } 

列表中的项目应该实现Parcelable