2011-07-18 14 views
2

ArrayAdapterを使用するListViewがあります。 ArrayAdapterのアイテムは、私が作成したカスタムオブジェクトです。Parcelable ArrayListからリストを再作成

このカスタムオブジェクトをParcelableから拡張しました。ユーザーが画面を回転し、instanceStateが保存されると、ArrayListがoutStateに書き込まれます。 ListActivityが再作成されると、instanceStateがArrayListに読み込まれます。 onResume()では、次に、ArrayListをitemsAdapterのitems変数に割り当て、ArrayAdapterを使用してListViewでsetAdapterを呼び出します。

残念ながら、何もListViewに表示されません。

私はデバッグしましたが、setAdapterが呼び出されるまですべてが正常に動作しているようです。 ArrayListはinstanceStateから読み込まれ、すべてのデータがそこに保存され、完全に保存されます。

アイデア?

更新:

問題を修正しました。私はstackoverflow私が答えを作成できるようになるまでここで説明を書き込もうとします。

onCreate()では、ArrayListの新しいインスタンスをインスタンス化します。私はそのArrayListを新しいArrayAdapterのインスタンスに渡し、このArrayAdapterを使ってListViewでsetAdapterを呼び出します。 onCreate()の後、onRestoreInstanceState()が呼び出されます。 onRestoreInstanceState()では、基本的にArrayListを新しいArrayList(InstanceStateから読み込んだArrayList)に設定しました。 ArrayAdapterのitem変数をこの新しいArrayListでポイントしても、ArrayAdapterはまだ古い空のラベルを指しているようです。したがって、リストには何も表示されません。 onRestoreInstanceStateを変更して、InstanceStateから読み取ったArrayListをonCreate()からすでに宣言されているArrayListにコピーしました。

答えて

0

onCreate()では、ArrayListの新しいインスタンスをインスタンス化します。私はそのArrayListを新しいArrayAdapterのインスタンスに渡し、このArrayAdapterを使ってListViewでsetAdapterを呼び出します。 onCreate()の後、onRestoreInstanceState()が呼び出されます。 onRestoreInstanceState()では、基本的にArrayListを新しいArrayList(InstanceStateから読み込んだArrayList)に設定しました。 ArrayAdapterのitem変数をこの新しいArrayListでポイントしても、ArrayAdapterはまだ古い空のラベルを指しているようです。したがって、リストには何も表示されません。 onRestoreInstanceStateを変更して、InstanceStateから読み取ったArrayListをonCreate()からすでに宣言されているArrayListにコピーしました。

+0

カスタムArrayDapaterクラスにParcelableを実装するコードを提供してください。 Parcelableメソッドを使ってListViewのリサイクルされた性質を処理する方法と、ユーザーがスクロールしていない場合でもすべてのリスト項目を完全にParcelableにする方法については混乱します。 – DummyBeginner

関連する問題