如何使用setRetainInstance(boolean)?

时间:2015-09-09 08:54:08

标签: android android-fragments android-viewpager fragmentpageradapter

假设我有Fragment A。它有一个实例变量mViewPager,指向其ViewPager

onCreate(Bundle)的{​​{1}}中,我调用Fragment A

改变方向时:

    调用
  1. setRetainInstance(true),并且新视图会膨胀。所以,我在新曝光的视图中有一个新的onCreateView(LayoutInflater, ViewGroup, Bundle)

  2. 方向改变后,
  3. ViewPager指向原始mViewPager

  4. 我的问题是:如何让(1)中的新ViewPager与(2)中保留的ViewPager相关联?

    或者我应该使用mViewPager

1 个答案:

答案 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的情况下改变方向。然后你很快就会发现在这个过程中会丢失什么,那就是你需要保留的状态。