构建 Parcel 时 ArrayList<String> null
ArrayList<String> null when building Parcel
我的一个 类 有 3 个属性 ArrayList,如下所示:
public class Product implements Parcelable{
// other properties
private ArrayList<String> categoryIds;
private ArrayList<String> categorySlugs;
private ArrayList<String> categoryNames;
public Product(){}
// getters and setters
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// writing other properties
dest.writeStringList(categoryIds); // here aren't null
dest.writeStringList(categorySlugs);
dest.writeStringList(categoryNames);
}
public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() {
public Product createFromParcel(Parcel pc) {
return new Product(pc);
}
public Product[] newArray(int size) {
return new Product[size];
}
};
public Product(Parcel in){
// reading other properties, all correct
in.readStringList(categoryIds); // from here are all null
in.readStringList(categorySlugs);
in.readStringList(categoryNames);
}
}
阅读 Parcel 构造函数中的注释。这三个为空,但在函数 "writeToParcel" 中它们不为空。所有其他属性都是正确的。我在这里缺少什么?
谢谢:)
您永远不会实例化 List 来创建实例。
例如,您需要:
private ArrayList<String> categoryIds = new ArrayList<String>();
new ArrayList<String>()
是关键部分,因为这是构建对象实例的地方。
更好的是,在 Product 的构造函数中构造这些列表。也可以考虑coding to interface。
使用以下代码读取列表:
categoryIds = in.createStringArrayList()
我的一个 类 有 3 个属性 ArrayList,如下所示:
public class Product implements Parcelable{
// other properties
private ArrayList<String> categoryIds;
private ArrayList<String> categorySlugs;
private ArrayList<String> categoryNames;
public Product(){}
// getters and setters
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// writing other properties
dest.writeStringList(categoryIds); // here aren't null
dest.writeStringList(categorySlugs);
dest.writeStringList(categoryNames);
}
public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() {
public Product createFromParcel(Parcel pc) {
return new Product(pc);
}
public Product[] newArray(int size) {
return new Product[size];
}
};
public Product(Parcel in){
// reading other properties, all correct
in.readStringList(categoryIds); // from here are all null
in.readStringList(categorySlugs);
in.readStringList(categoryNames);
}
}
阅读 Parcel 构造函数中的注释。这三个为空,但在函数 "writeToParcel" 中它们不为空。所有其他属性都是正确的。我在这里缺少什么?
谢谢:)
您永远不会实例化 List 来创建实例。
例如,您需要:
private ArrayList<String> categoryIds = new ArrayList<String>();
new ArrayList<String>()
是关键部分,因为这是构建对象实例的地方。
更好的是,在 Product 的构造函数中构造这些列表。也可以考虑coding to interface。
使用以下代码读取列表:
categoryIds = in.createStringArrayList()