2

私はこのクラスを持っています:

public class Foo implements Parcelable {
    private int id;
    private MyFoo myFoo
    private ForeignCollection<MyFoo2> myFoo2s;

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(id);
        out.writeParcel(myFoo, flags);
        out.write //How can I write the ForeignCollection?
    } 

    public Foo(Parcel in) {
        id = in.readInt();
        myFoo = in.readParcelable(getClass().getClassLoader())
        myFoo2s = // How can I read the ForeignCollection?
    }

    public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>() {
        public Foo createFromParcel(Parcel in) {
            return new Foo(in);
        }

        public Foo[] newArray(int size) {
            return new Foo[size];
        }
    };
}

MyFoo および MyFoo2 クラスも Parcelable を実装していますが、ForeignCollection は実装していません。ForeignCollectionは、次のインターフェイスを実装するクラスです: Collection、CloseableIterable、および Iterable。

out.writeListForeignCollection は List インターフェースを実装していないので使えません。

4

2 に答える 2

1

ここで、問題の解決策を示す例を見つけることができます:

  • Gift は私が Parcelable にするオブジェクトです。
  • 画像: このクラスの唯一の変数であり、Integer のコレクションであると考えてください
  • メソッド getImage: 整数のコレクションを返します (コレクション)

Collection を実装するオブジェクトにこのパターンを適用できます

public void writeToParcel(Parcel parcel, int i) {

        List imageList = new ArrayList(getImage());
        parcel.writeList(imageList);
}

public Gift(Parcel source){

        image = source.readArrayList(Integer.class.getClassLoader());

}

PS は writeToParcel メソッドで Collection.sort(imageList) を使用しません。要素を昇順で並べ替えてコレクションの順序を変更するためです。

ベスト

于 2014-11-15T10:50:59.997 に答える