22

我有一个实现它们的接口IA和类BC。B 和 C 都实现Parcelable了。

然后我有棘手的部分:

D类有一个ArrayList< IA >。我也需要这个在arraylist. 它们共享相同的结构,但“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);
}
4

2 回答 2

42
    @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);
}
于 2013-12-10T11:14:58.660 回答
1

我建议您安装“Android Parcelable 代码生成器”插件。在此之后,您可以生成writeToParcel函数、构造函数,它仅通过单击Alt+Insert按钮从包裹和创建者类中读取。

于 2017-10-13T14:32:27.023 回答