これは一般的な Java の質問です。Androidには、インターフェースがありますParcelable
:
これは公式ドキュメント内の例です:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
と の 2 つの機能を実装する必要がdescribeContents()
ありwriteToParcel
ます。
(問題)
それ以外にも、Parcelable.Creator<T>
インターフェースを CREATOR という static フィールドとして実装する必要があります。
すべてが実際には簡単です。ここで、Parcelable クラス タイプを持つジェネリック クラスを作成します。
public class ShushContainer<T extends Parcelable> implements Parcelable
Parcelable を実装できました。T
のwriteToParcel
関数を呼び出すことができます。ただし、静的 CREATOR フィールドにアクセスできません。
public class ShushContainer<T extends Parcelable> implements Parcelable {
Vector<T> items;
String someField;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(someField);
dest.writeInt(items.size());
for(int i=0;i<items.size();i++)
items.get(i).writeToParcel(dest, flags);
}
public ShushContainer(Parcel in) {
someField = in.readString();
int size = in.readInt();
for(int i=0;i<size;i++)
//this does not work
items.add(T.CREATOR.createFromParcel(in));
}
public static final Parcelable.Creator<ShushContainer> CREATOR = new Parcelable.Creator<ShushContainer>() {
public ShushContainer createFromParcel(Parcel in) {
return new ShushContainer(in);
}
public ShushContainer[] newArray(int size) {
return new ShushContainer[size];
}
};
}