【发布时间】:2013-03-10 18:00:20
【问题描述】:
我有一个接口 IA 和实现它们的类 B 和 C。
B 和 C 都实现了Parcelable。
然后我有棘手的部分:
D 类有一个ArrayList< IA >。我也需要在arraylist 中插入 B 类和 C 类。它们共享相同的结构,但 “IS-A” 关系不适用。
我需要将 D 作为包裹从一项活动传递到另一项活动。
我试过写(ArrayList<IA>) in.readSerializable,但我得到了一个IOException。我知道如果 IA 不是一个接口,问题就很简单,但我似乎找不到一个简单的解决方案。
有什么想法吗?
@SuppressWarnings("unchecked")
public D (Parcel in) {
list = new ArrayList<IA>();
(...)
list = (ArrayList<IA>) in.readSerializable
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public D createFromParcel(Parcel in) {
return new D(in);
}
public D[] newArray(int size) {
return new D[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
(...)
dest.writeList(list);
}
【问题讨论】:
-
IA 应该扩展 Parcelable
-
和 D 使用 in.readArrayList(list, Creator)?但是哪个创造者?
-
你能贴出任何 D 类 Parcelable 方法的代码来看看吗?
-
我已经用解决方案编辑了问题(还没有足够的声誉)。
-
同意您的解决方案,除了这允许实现不可序列化的 IA,因此在您 writeList 时崩溃。
标签: java android interface arraylist parcelable