使用兼容性库时,setRetainInstance不适用于ListFragment

时间:2011-08-02 01:56:58

标签: android android-fragments android-compatibility

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

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

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

感谢任何帮助,如果有必要,我可以发布一些代码片段,但我没有做任何复杂的事情。

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

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:1)

看来,当您在调用setRetainInstance = trueonSaveInstanceState()时设置onActivityCreated()时,将不会返回Bundle

但是,正如保留ListFragment一样,您只需将其状态存储到字段中,然后在onActivityCreated()内处理。

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