假设我有一个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的情况下进行方向更改即可。然后,您很快就会发现该过程中丢失了什么,这就是您需要保持的状态。

10-08 03:30