2011-08-05 6 views

答えて

4

YourObjectParcelableインターフェイスを実装してから、bundle.putParcelableArraylist(theParcelableArraylist)を使用してください。

編集:whoopsが質問を誤読しました。なぜあなたはarraylistの配列を保存したいですか?オリエンテーションの変更を維持するために、代わりにonRetainNonConfigurationInstanceを使用したいと思うかもしれませんか?

編集2:[OK]をクリックします。新しいWrapperクラスを作成し、Parcelableを実装します(myObjectsも分解可能でなければならないことに注意してください)。

public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(mElements.length); 
    for(ArrayList<MyObject> element : mElements) { 
    dest.writeParcelableArray(element.toArray(new MyObject[0]), flags); 
    } 
} 

そしてコンストラクタ:writeToParcel方法は次のようなものになります、私はちょうどputSerializable(myarraylistofstuff)を使用して、私はget()を使用してキャストで取り戻す

private Wrapper(Parcel in) { 
    int length = in.readInt(); 
    //Declare list 
    for (int i = 0; i < length; i++) { 
    MyObject[] read = in.readParcelableArray(Wrapper.class.getClassLoader()); 
    //add to list 
    } 
} 
+0

を使用することをお勧めしますオブジェクトの多くを持っている場合

とにかくそれをデシリアライズし、私のObject細かいシリアライズし、それは向きの変更のため、ほとんどですが、私は活動のライフサイクルに対応するために、同様にそれを必要とします。 – Greg

+0

私は、パーセルブルを実装し、それほどエレガントではない方法でラッパークラスを作成することができると思います。私は私の答えを編集します。 – dmon

+0

これはうまくいきましたか? –

0

あなたのオブジェクトがSerializableインタフェースでマークされたシリアル化をサポートしている場合、あなたはbundle.putSerializableを使用することができるはずです。

ArrayListSerializableをサポートしていますが、平野についてはわかりません。arrayバンドルを使用して

1

ない可能バンドルは唯一のプリミティブの配列リストを可能にするよう、...

はparcleableまたはアプリケーションレベルのデータまたは静的変数(悪い習慣)を使用してみてください。

0

を、あなただけの未チェックの警告を沈黙させる必要があります。私は間違っている場合は私に正しいと思うあなたはSerializableとしてそれを偽造するオブジェクトを渡すことができます、あなたはオブジェクト参照を渡す同じプロセスにとどまる限り。このアプローチは、明らかに、別のアプリケーションにデータを渡すときには機能しません。

EDIT:現在アンドロイドのみ断片間の参照を渡し、IはActivityに任意のオブジェクトを渡すことを試みてきた、それが働いたが、オブジェクトが異なっていた、Fragmentの引数を使用して、同じ試験ではなく、同じObjectを示しました。あなたはそれが代わりにParcel