【问题标题】:Save state of adapter in different instances of ListFragment在 ListFragment 的不同实例中保存适配器的状态
【发布时间】:2013-10-10 15:34:59
【问题描述】:

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

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

当我第一次打开应用程序时,一切正常,但是当我单击一个项目并创建另一个 Activity 时,当我返回该片段时,项目处于其位置,但我在适配器中得到 IndexOutOBoundsException。 getItem(),它说size是0但是我可以看到List里面的元素!

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

【问题讨论】:

    标签: android adapter android-listfragment


    【解决方案1】:

    看看Fragment.onSaveInstanceState()。如果实现这一点并填充Bundle,当您的片段被重新创建时,相同的包将被传回给您。

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

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

    【讨论】:

    • 感谢您的回复,但我只使用实例字段解决了,避免使用任何静态字段,在我的代码中问题就是这样......!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2013-04-15
    • 2013-08-27
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多