【发布时间】:2017-06-13 07:15:03
【问题描述】:
有一个接口DrawingElement(扩展Parcelable)有多种实现。在另一个类中有一个字段List<DrawingElement> elements,它实现了Parcelable。所以 List 应该被写入 Parcel,但是读取 Parcelable ArrayList 的方法需要一个具体的类来引用 Creator 的具体实现,这不起作用:in.createTypedArrayList(DrawingElement.CREATOR)。
public interface DrawingElement extends Parcelable {
}
public class FirstDrawingElementImpl implements DrawingElement {
@Override
public void writeToParcel(Parcel dest, int flags) {
// done easily.
}
}
public class SecondDrawingElementImpl implements DrawingElement {
@Override
public void writeToParcel(Parcel dest, int flags) {
// done easily.
}
}
public class DrawingElementsContainer implements Parcelable {
private List<DrawingElement> elements;
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO:
}
}
有什么建议吗?
更新:
如果我必须使用@pskink 建议,我必须进行奇怪的转换,例如:
protected Drawing(Parcel in) {
DrawingElement[] parcelables = (DrawingElement[]) in.readParcelableArray(DrawingElement.class.getClassLoader());
elements = new ArrayList<>(Arrays.asList(parcelables));
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelableArray(elements.toArray(new Parcelable[elements.size()]), flags);
}
dest.writeList(elements) 是显而易见的决定,但我因为传递了一个接口类加载器而感到困惑。
【问题讨论】:
-
有助于了解您是如何实施的
-
你需要
Parcelable做什么? -
@ootinii,如果我知道如何实现将接口列表写入 Parcel,那就毫无疑问了。
-
@pskink,我在 onSaveInstanceState 方法中需要它。
-
接口是一个“代码”,你需要保存一些“状态”:这是你的数据,不是代码
标签: android interface parcelable