在方向更改时保存UI - 如果保留Fragment,则onSaveInstanceState无法按预期工作

时间:2011-10-20 12:55:12

标签: android android-fragments

使用compat lib v1(因为某些错误而不使用v2 | 3);变体this question

我有一个片段,其UI具有各种控件,其状态我希望在方向更改时保持。

父母活动在方向改变时被销毁(请不要告诉我有关清单变化的信息,以避免活动娱乐!!!!)。

片段调用setRetainInstance(true)

1)现在我的理解是,具有唯一ID的视图应该保留一些状态,例如方向更改。鉴于此,我希望将非空包绑定到onCreateView|onActivityCreated,但它为空。

2)无论如何,如果我在onSaveInstanceState中保存状态(确保我调用super),我仍然会在'onCreateView | onActivityCreated`中获得一个空包。

3)如果我不调用setRetainInstance(true),那么即使我没有`onSaveInstanceState'方法,我也会在onCreateView|onActivityCreated中得到一个非空包。

我的问题是,这是否按预期工作,我对生命周期的理解被打破了?无论如何,我猜测对我来说最好的方法是保留片段,然后在片段中保持控件的状态。

提前致谢。彼得。

1 个答案:

答案 0 :(得分:17)

如果您使用setRetainInstance(true),那么捆绑包当然为空。该片段不会被销毁,只会从当前活动中分离并附加到新活动。只有当片段被销毁时,才会获得包含您在onSaveInstanceState中保存的值的包。只需删除setRetainInstance(true)并使用onCreateView()中保存的值来设置自定义视图。