使用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
的情况下阻止片段娱乐吗?因为由于不同方向布局和不同数量的片段,我的初衷是仅重新创建一个标记为保留的状态片段,不会还原未标记为保留的其他视图片段。答案 0 :(得分:7)
查看未自动恢复的层次结构。因此,在Fragment.onCreateView()
或Activity.onCreate()
中,您必须恢复所有视图(从xml或以编程方式)。包含片段的每个ViewGroup
必须与第一次创建时具有相同的ID。创建视图层次结构后,由于ID,Android会恢复所有片段并将其视图放在右侧ViewGroup
中。假设Android记住片段所在的ViewGroup
的ID。
这发生在onCreateView()
和onStart()
之间。
我认为可以保留片段重新创建,但是,在保存片段的ViewGroup上,将可见性设置为GONE。通过这种方式,片段不会出现,您可以稍后以编程方式将其删除。