我有一个实现parcelable的类:
public final class Product implements Parcelable {
private Integer ID;
private String title;
public Product(Parcel source) {
this.ID = source.readInt();
this.title = source.readString();
}
public int describeContents() {
return this.hashCode();
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.ID);
dest.writeString(this.title);
}
public static final Parcelable.Creator CREATOR
= new Parcelable.Creator() {
public Product createFromParcel(Parcel in) {
return new Product(in);
}
public Product[] newArray(int size) {
return new Product[size];
}
};
// Getters
...
// Setters
...
}
在我的应用中的一个点上,来自一个活动" A"我需要将自定义对象数组列表传递给另一个活动" B"所以我这样做:
ArrayList<Product> productList = new ArrayList<Product>();
productList.add(new Product(...))
productList.add(new Product(...))
...
intent.putParcelableArrayListExtra("products", productList);
来自活动&#34; B&#34;我明白了:
ArrayList<Product> productList;
Intent intent = this.getIntent();
productList = (ArrayList<Product>) intent.getParcelableArrayListExtra("products");
我正在通过编译过程执行强制转换抛出错误:
Error:(38, 78) error: inconvertible types
required: ArrayList<Product>
found: ArrayList<Parcelable>
所以我做错了什么?
相反,如果我删除了强制转换它正确编译...所以我不确定是否删除了强制转换,一旦启动它会在尝试进行隐式强制转换时抛出运行时异常。
答案 0 :(得分:2)
这里有两个问题:
1)您的CREATOR
不是通用的。你有:
public static final Parcelable.Creator CREATOR
= new Parcelable.Creator() {
应该是:
public static final Parcelable.Creator<Product> CREATOR
= new Parcelable.Creator<Product>() {
2)更改后,您不需要手动投射:
productList = intent.getParcelableArrayListExtra("products");