如何传递一个包含对象列表的可放样对象?
我在下面创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 ???????; } }
如果类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