使用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
中得到一个非空包。
我的问题是,这是否按预期工作,我对生命周期的理解被打破了?无论如何,我猜测对我来说最好的方法是保留片段,然后在片段中保持控件的状态。
提前致谢。彼得。
答案 0 :(得分:17)
如果您使用setRetainInstance(true)
,那么捆绑包当然为空。该片段不会被销毁,只会从当前活动中分离并附加到新活动。只有当片段被销毁时,才会获得包含您在onSaveInstanceState
中保存的值的包。只需删除setRetainInstance(true)
并使用onCreateView()中保存的值来设置自定义视图。