屏幕旋转后不显示片段
我有一个活动ActivityA
和3个片段FragmentA
,FragmentB
和FragmentC
。屏幕旋转后不显示片段
要添加FragmentA,我用replace
,其中fragment
是FragmentA
一个新的实例:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.frame_layout_fragment, fragment)
.commit();
在ActivityA的onCreate
方法,我做了检查FragmentA
创作:
if (savedInstanceState == null) {
FragmentA fragmentA = FragmentA.newInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.frame_layout_fragment, fragmentA)
.commit();
}
要添加FragmentB
和FragmentC
,我使用add
和addToBackStack
,其中fragment
是新实例的FragmentB
或FragmentC
:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.frame_layout_fragment, fragment)
.addToBackStack(null)
.commit();
我按后退按钮,同时FragmentC
,它显示FragmentB
,并按下返回键,而在FragmentB
显示FragmentA
,符合市场预期。当我在FragmentC
,我旋转设备,并且FragmentC
仍然显示,如预期。
然而,当我使用2个按压后退按钮从FragmentC
导航到FragmentA
,然后两次旋转设备,肖像 - >风景 - >肖像,添加FragmentB
,添加FragmentC
,然后我一次旋转设备,我预计FragmentC
来显示,而是FragmentB
显示。当我按下后退按钮一次,没有任何反应。当我再次按下它时,它将导航回FragmentA
。看起来好像FragmentC
出现在背面堆叠中,但由于某种原因它不可见。
为什么FragmentC
在这种情况下不可见?
我觉得这个回答另一个问题是你的答案太:Difference between add(), replace(), and addToBackStack()
它说:添加和更换之间
还有一个重要的区别:更换 删除现有的片段,并增加了一个新的分段。这意味着当 你按下返回按钮时,被取代的片段将被创建 并调用其onCreateView。而添加保留了现有的 片段,并添加了一个新片段,这意味着现有片段将为 活动,并且它们不会处于“已暂停”状态,因此当后退按钮为 时,按下onCreateView不会调用现有片段( 片段在添加新片段之前是在那里)。在 片段的生命周期事件onPause,onResume,onCreateView和其他 生命周期事件将在替换的情况下被调用,但它们不会被添加时调用 。
旋转设备调用onCreateView为我的情况下的每个片段。即使调用了onCreateView,FragmentC也不会显示。 – catsfw