在ListFragment的不同实例中保存适配器的状态

时间:2013-10-10 15:34:59

标签: android adapter android-listfragment

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

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

当我第一次打开应用程序时,一切正常,但是当我点击一个项目并创建另一个Activity时,当我回到该片段时,项目处于他们的位置,但我在适配器中得到IndexOutOBoundsException。 getItem(),它表示大小为0但我可以看到列表中的元素!

如何保存和恢复适配器对象的状态? (它是ListFragment类的实例字段)

1 个答案:

答案 0 :(得分:0)

看看Fragment.onSaveInstanceState()。如果实现此并填充Bundle,则在重新创建片段时,相同的包将被传递给您。

如何在捆绑中保存适配器的状态是另一个问题。这取决于你,但一种方法是让支持你的适配器的元素类可以使用putParcelableArrayList()。在你的onCreate()方法中,你会做类似的事情,

if (savedInstanceState != null && savedInstanceState.containsKey("myState")) {
  List<MyObj> objs = savedInstanceState.getParcelableArrayList("myState");
  myAdapter = new MyAdapter(..., objs, ...);
}