0

ListFragment を複数回インスタンス化しています。アダプターの状態を保存して復元し、「onListItemClick」メソッドを正しく実行したいと考えています。

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    mCallback.onPlaceClick(adapter.getItem(position));
}

初めてアプリを開くとすべてがうまくいきますが、アイテムをクリックして別のアクティビティが作成され、そのフラグメントに戻るとアイテムはその位置にありますが、adapter.getItem() で IndexOutOBoundsException を取得します、サイズが 0 と表示されていますが、リストに要素が表示されます!

アダプター オブジェクトの状態を保存および復元するにはどうすればよいですか? (ListFragment クラスのインスタンス フィールドです)

4

1 に答える 1

0

Fragment.onSaveInstanceState()を見てください。これを実装して に入力するとBundle、フラグメントが再作成されたときに同じバンドルが返されます。

アダプターの状態をバンドルに保存する方法は別の問題です。それはあなた次第ですが、たとえば、アダプターをサポートする要素クラスをパーセル化可能にし、putParcelableArrayList()を使用する方法があります。あなたonCreate()のメソッドでは、次のようなことをします。

if (savedInstanceState != null && savedInstanceState.containsKey("myState")) {
  List<MyObj> objs = savedInstanceState.getParcelableArrayList("myState");
  myAdapter = new MyAdapter(..., objs, ...);
}
于 2013-10-10T15:54:43.863 に答える