android - startactivity流程 - startactivity用法




如何传递包含对象列表的可分段对象? (4)

另一种方法是使用readValuewriteValue

protected Product (Parcel in) {
        ...
        in.readValue(this.getClass().getClassLoader());
    }

@Override
public void writeToParcel(Parcel parcel, int i) {
    ...
    parcel.writeValue(**list**);
}

列表中的项目应该实现Parcelable

我在下面创建了一个Parcelable对象,我的对象包含一个产品List 。 在我的构造函数中,如何处理为List重新创建我的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与可协议协议兼容,则应按照文档进行操作。

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

这应该工作:

in.readTypedList(products, Product.CREATOR);

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

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

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

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

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





android-intent