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

我在下面创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 ???????; } } 

  • 如果活动由同一个class级实施,如何回到特定的活动
  • 从首选项XML的Mailto可能?
  • 使用双SIM卡设备中的指定SIM拨打电话
  • Android:如何在使用LocationManager.requestLocationUpdates()时从intent bundle extras获取位置信息
  • 检查意图uri是否可用
  • TaskStackBuilder#startActivities()NullPointerException
  • 使用意图将数据发送到我的活动
  • 在finish()之后从活动中获得结果; 在Androidunit testing中
  • 如果类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