的Android Parcelable - 写和读的ArrayList <IA>时1A

2019-07-22 07:55发布

我有一个接口IAB类和C实现它们。 B和C实现Parcelable为好。

然后,我有棘手的问题:

d类具有ArrayList< IA > 我需要这在太插入两个类B和C 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);
}

Answer 1:

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


Answer 2:

我建议你安装的“Android Parcelable代码生成器”插件。 这之后,您可以生成writeToParcel功能,构造从包裹和创建者类只蒙山点击读取Alt+Insert按钮。



文章来源: Android Parcelable - Write and read ArrayList< IA > when IA is a interface