我正在尝试在方向更改中保存ListFragment子类,因此我将setRetainInstance(true)添加到onCreate函数的末尾 . 我添加了一个onSaveInstanceState方法将所有数据添加到一个包中,然后将代码添加到onActivityCreated中以加载该数据 . 不幸的是,它不会起作用 .
当我在Log.d的帮助下添加了一些调试消息时,我发现不仅没有调用onSaveInstanceState,而且onCreate是(文档似乎说当retainInstance为true时不应该发生) . onCreate和onActivityCreated都没有捆绑我的数据(毫无疑问) .
我猜这可能是兼容性库的一个问题,虽然我没有android 3.0设备来测试这个 .
任何帮助表示赞赏,如果有必要,我可以发布一些代码片段,尽管我没有做任何复杂的事情 .
更新:当我改变方向时(它应该是这样),没有调用onDestroy,所以似乎有些setRetainInstance正在工作
2 回答
我终于弄清楚我的问题是什么 . 这一切都归结为我忘记添加的一行 . 在我的FragmentActivity子类中,我覆盖了onSaveInstanceState,但我从未调用过super.onSaveInstanceState . 显然,与我父母忘记调用的其他方法不同,onSaveInstanceState在忘记调用父类的版本时不会抛出运行时错误,而setRetainInstance只是停止工作 . 我希望这可以节省一些人在解决这个问题时遇到的麻烦 .
看来,当你在调用
onSaveInstanceState()
和onActivityCreated()
时设置setRetainInstance = true
时,将不会返回Bundle
.但是,正如
ListFragment
被保留一样,您可以简单地将其状态存储到一个字段中,并在onActivityCreated()
中处理它 .请记住,
Activity
仍将被销毁并重新创建 .