假设我有Fragment A
。它有一个实例变量mViewPager
,指向其ViewPager
。
在onCreate(Bundle)
的{{1}}中,我调用Fragment A
。
改变方向时:
setRetainInstance(true)
,并且新视图会膨胀。所以,我在新曝光的视图中有一个新的onCreateView(LayoutInflater, ViewGroup, Bundle)
。
ViewPager
指向原始mViewPager
。
我的问题是:如何让(1)中的新ViewPager
与(2)中保留的ViewPager
相关联?
或者我应该使用mViewPager
?
答案 0 :(得分:2)
如 @Selvin 的评论中所述,您应该重新创建UI元素。
您应该知道的一些信息:
setRetainInstance(true)
应仅用于非UI片段。我个人的建议是不要先考虑这个,除非你没有选择。
要正确处理重启,您的活动非常重要 通过正常的Activity生命周期恢复其先前的状态 Android在销毁之前调用onSaveInstanceState() 活动,以便您可以保存有关应用程序状态的数据。您 然后可以在onCreate()或期间恢复状态 onRestoreInstanceState()。
您使用onSaveInstanceState(Bundle)
是对的,一般情况下,您应该使用保存您的州。请注意,它是您保存的状态,但不是UI或整个片段。
例如,状态可以计算单击按钮的次数。 查看以下链接,了解如何保存状态
http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState
此外,一些UI状态,例如在EditText中输入的文本已在系统API中处理。所以你只需要处理你自己维护的状态。
修改强>
如果您对此不熟悉,并且不知道需要保存什么以及不需要保存什么,请先跳过它,然后在没有onSaveInstanceState
的情况下改变方向。然后你很快就会发现在这个过程中会丢失什么,那就是你需要保留的状态。