在我的应用程序中,我有一个类,其中包含一个列表列表,我想对特定类进行Parcelable
到目前为止我已尝试过
public class FeaturesParcelable implements Parcelable {
private List<List<SpinnerModel>> featuresSublist;
public List<List<SpinnerModel>> getFeaturesSublist() {
return featuresSublist;
}
public void setFeaturesSublist(List<List<SpinnerModel>> featuresSublist) {
this.featuresSublist = featuresSublist;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.featuresSublist);
}
public FeaturesParcelable() {
}
protected FeaturesParcelable(Parcel in) {
this.featuresSublist = new ArrayList<List<SpinnerModel>>();
in.readList(this.featuresSublist, List<SpinnerModel>.class.getClassLoader());
}
public static final Parcelable.Creator<FeaturesParcelable> CREATOR = new Parcelable.Creator<FeaturesParcelable>() {
@Override
public FeaturesParcelable createFromParcel(Parcel source) {
return new FeaturesParcelable(source);
}
@Override
public FeaturesParcelable[] newArray(int size) {
return new FeaturesParcelable[size];
}
};
}
但我收到错误无法从
中的参数化类型中进行选择protected FeaturesParcelable(Parcel in) {
this.featuresSublist = new ArrayList<List<SpinnerModel>>();
in.readList(this.featuresSublist, List<SpinnerModel>.class.getClassLoader());
}
答案 0 :(得分:1)
1)List<SpinnerModel>.class
无法解决您所期望的事情。 Java使用generic type erasure,因此该语句的运行时类型为Class<List<?>>
。这不足以确定List
的合适实现或列表元素的类型。
2)即使您克服了初始难度(例如,将List
替换为ArrayList
并手动反序列化嵌套列表),您应该知道,List<SpinnerModel>.class.getClassLoader()
会返回 system ClassLoader 。 System ClassLoader是硬编码的,只能加载Android框架类;为了反序列化在应用程序中声明的类,使用分配给它们的ClassLoader:SpinnerModel.class.getClassLoader()
。