使用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
}
现在它可以工作了,但我仍然不完全了解它是如何工作的。
我的疑问是:
- 片段是在哪个时刻以及如何附加到视图的?我已经尝试过片段恢复是
onCreate
在FragmentActivity
. 但是如果我setContentView
在那之后调用,片段如何附加到视图? - 我可以在不覆盖的情况下防止片段重新生成
onSaveInstanceState
吗?因为由于具有不同数量的片段的不同方向布局,我的初衷是仅重新创建一个标记为保留的状态片段,而不恢复未标记为保留的其他视图片段。