假设我有一个Fragment A
。它有一个实例变量mViewPager
指向其ViewPager
。
在onCreate(Bundle)
的Fragment A
中,我调用setRetainInstance(true)
。
更改方向后:onCreateView(LayoutInflater, ViewGroup, Bundle)
被调用,并且新视图被放大。因此,在新放大的视图中有一个新的ViewPager
。
方向更改后,mViewPager
指向原始的ViewPager
。
我的问题是:如何获得(1)中的新ViewPager
与(2)中保留的mViewPager
关联?
还是应该只使用onSaveInstanceState(Bundle)
?
最佳答案
如@Selvin的评论中所述,您应该让UI元素重新创建。
您应该知道的一些信息:setRetainInstance(true)
应该仅用于非UI片段。我个人的建议是不要首先考虑这一点,除非您已经选择不了。
为了正确处理重启,重要的是您的活动
通过正常的活动生命周期恢复其先前状态,
Android会在销毁您的onSaveInstanceState()之前
活动,以便您可以保存有关应用程序状态的数据。您
然后可以在onCreate()期间恢复状态,或者
onRestoreInstanceState()。
使用onSaveInstanceState(Bundle)
是正确的,通常,应使用它来保存状态。请注意,这是您保存的状态,而不是UI或整个Fragment。
例如,状态可以是单击按钮的次数的计数。
查看下面的链接,了解如何保存状态
http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState
此外,某些用户界面状态例如在EditText中输入的文本已在系统API中处理。因此,您只需要处理自己维护的状态。
编辑:
如果您不熟悉此功能,并且不知道需要保存什么和不需要什么,则只需先跳过它,然后在没有onSaveInstanceState
的情况下进行方向更改即可。然后,您很快就会发现该过程中丢失了什么,这就是您需要保持的状态。