Android Parcelable - 写入和读取ArrayList< IA>当IA是一个接口时

时间:2013-03-21 09:41:41

标签: java android interface arraylist parcelable

我有一个实现它们的接口 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);
}

2 个答案:

答案 0 :(得分:37)

    @SuppressWarnings("unchecked")
public D (Parcel in) {
    list = new ArrayList<IA>();
    (...)    
    //ERROR -> list = (ArrayList<IA>) in.readSerializable 
    list = in.readArrayList(IA.class.getClassLoader());
}

@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);
}

答案 1 :(得分:0)

我建议您安装&#34; Android Parcelable代码生成器&#34;插入。在此之后,您可以生成writeToParcel函数,该构造函数仅在单击Alt+Insert按钮时从parcel和creator类读取。