自动片段还原的工作原理

时间:2013-03-23 22:05:52

标签: android android-fragments android-orientation

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

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

我最初的问题是我得到了与that other question类似的一些片段的副本。 我在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的{​​{1}}中完成片段恢复。但是,如果我之后调用FragmentActivity,片段如何附加到视图?
  • 我可以在不覆盖setContentView的情况下阻止片段娱乐吗?因为由于不同方向布局和不同数量的片段,我的初衷是仅重新创建一个标记为保留的状态片段,不会还原未标记为保留的其他视图片段。

1 个答案:

答案 0 :(得分:7)

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

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