自动片段还原的工作原理

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

我知道这主要是在onSaveInstanceState保存状态,然后在activity的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 } 

现在它可以工作,但我仍然不完全理解它是如何工作的。

我的怀疑是:

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

Solutions Collecting From Web of "自动片段还原的工作原理"

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

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