インターフェイス[〜#〜] ia [〜#〜]とクラス[〜#〜] b [〜#〜]と[〜# 〜] 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);
}
@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);
}
「Android Parcelable code generator」プラグインをインストールすることをお勧めします。この後、writeToParcel
関数を生成できます。これは、Alt+Insert
ボタンをクリックするだけで区画とクリエータークラスから読み取るコンストラクターです。