首页 文章

使用compatiblebiltiy库时,setRetainInstance不适用于ListFragment

提问于
浏览
5

我正在尝试在方向更改中保存ListFragment子类,因此我将setRetainInstance(true)添加到onCreate函数的末尾 . 我添加了一个onSaveInstanceState方法将所有数据添加到一个包中,然后将代码添加到onActivityCreated中以加载该数据 . 不幸的是,它不会起作用 .

当我在Log.d的帮助下添加了一些调试消息时,我发现不仅没有调用onSaveInstanceState,而且onCreate是(文档似乎说当retainInstance为true时不应该发生) . onCreate和onActivityCreated都没有捆绑我的数据(毫无疑问) .

我猜这可能是兼容性库的一个问题,虽然我没有android 3.0设备来测试这个 .

任何帮助表示赞赏,如果有必要,我可以发布一些代码片段,尽管我没有做任何复杂的事情 .

更新:当我改变方向时(它应该是这样),没有调用onDestroy,所以似乎有些setRetainInstance正在工作

2 回答

  • 1

    我终于弄清楚我的问题是什么 . 这一切都归结为我忘记添加的一行 . 在我的FragmentActivity子类中,我覆盖了onSaveInstanceState,但我从未调用过super.onSaveInstanceState . 显然,与我父母忘记调用的其他方法不同,onSaveInstanceState在忘记调用父类的版本时不会抛出运行时错误,而setRetainInstance只是停止工作 . 我希望这可以节省一些人在解决这个问题时遇到的麻烦 .

  • 10

    看来,当你在调用 onSaveInstanceState()onActivityCreated() 时设置 setRetainInstance = true 时,将不会返回 Bundle .

    但是,正如 ListFragment 被保留一样,您可以简单地将其状态存储到一个字段中,并在 onActivityCreated() 中处理它 .

    请记住, Activity 仍将被销毁并重新创建 .

相关问题