0

我有一个多次实例化的 ListFragment,我想保存和恢复适配器的状态以正确执行“onListItemClick”方法。

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

当我第一次打开应用程序时,一切正常,但是当我单击一个项目并创建另一个 Activity 时,当我返回该片段时,项目处于其位置,但我在 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 回答