自动片段还原的工作原理

luj*_*jop 19 android android-fragments android-orientation

使用FragmentActivity它时会自动恢复片段状态并重新创建所有片段.

我知道这主要是为了保存状态onSaveInstanceState,然后在活动中恢复onCreate.看一下代码,我看到所有片段都被重新创建(或者只有在retainInstance为真时才附加)并添加到了FragmentManager但是我不清楚它们以哪种方式添加到视图中,因为视图不是自动的恢复.

我最初的问题是,我得到了一些类似于其他问题的碎片重复.我的工作原则是onCreate:

   Fragment f = fm.findFragmentByTag(tagName);
   if(f==null) {
       f = createFragment();
       fm.beginTransaction().add(R.id.myContainer,f,tagName).commit();
   }  else {
     //Nothing it's on the view
   }
Run Code Online (Sandbox Code Playgroud)

现在它有效,但我仍然不完全理解它是如何工作的.

我的怀疑是:

  • 在哪一刻以及片段如何附加到视图?我已经尝试该片段恢复在做onCreateFragmentActivity.但是如果我setContentView在那之后打电话,片段如何附加到视图?
  • 我可以在不覆盖的情况下阻止碎片娱乐onSaveInstanceState吗 因为由于具有不同数量的片段的不同方向布局,我的初衷是仅重新创建标记为保留的一个状态片段,而不恢复未标记为保留的其他视图片段.

Gab*_*ada 7

查看层次结构未自动恢复.因此,在Fragment.onCreateView()或中Activity.onCreate(),您必须恢复所有视图(从xml或以编程方式).每个ViewGroup包含片段的ID必须与第一次创建时具有相同的ID.创建视图层次结构后,Android会恢复所有片段并将其视图放在右侧,ViewGroup这要归功于ID.假设Android记住ViewGroup片段所在的ID .这发生在onCreateView()和之间onStart().

我认为可以保留片段重新创建,但是,在保存片段的ViewGroup上,将可见性设置为GONE.这样,片段不会出现,您可以稍后以编程方式删除它.