5

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

当我在 Log.d 的帮助下添加了一些调试消息时,我发现不仅没有调用 onSaveInstanceState,而且还调用了 onCreate(文档似乎说当 retainInstance 为真时不应该发生这种情况)。onCreate 和 onActivityCreated 都没有与我的数据捆绑在一起(不出所料)。

我猜这可能是兼容性库的问题,尽管我没有 android 3.0+ 设备来测试它。

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

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

4

2 回答 2

10

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

于 2011-08-04T20:16:46.510 回答
1

看来,当你设置setRetainInstance = truewhileonSaveInstanceState()onActivityCreated()都被调用时,则Bundle不会返回。

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

请记住,Activity遗嘱仍然会被破坏和重建。

于 2011-12-13T15:04:36.690 回答