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