Android 屏幕旋转后未显示碎片
我有一个活动,Android 屏幕旋转后未显示碎片,android,android-fragments,screen-rotation,Android,Android Fragments,Screen Rotation,我有一个活动,ActivityA,还有3个片段,FragmentA,FragmentB,和FragmentC 要添加FragmentA,我使用replace,其中fragment是FragmentA的一个新实例: getSupportFragmentManager() .beginTransaction() .replace(R.id.frame_layout_fragment, fragment) .commit(); 在ActivityA的o
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
显示,而是片段b
显示。当我按一下后退按钮时,什么也没发生。当我再次按下它时,它会导航回FragmentA
。看起来FragmentC
出现在后堆栈中,但由于某些原因,它不可见
为什么在这个场景中,
FragmentC
不可见?我想另一个问题的答案也是你的答案:
它说:
添加和替换之间的另一个重要区别是:替换
删除现有片段并添加新片段。这意味着
您按下后退按钮,将创建被替换的片段
调用其onCreateView。而add保留了现有的
片段并添加一个新片段,这意味着现有片段将被删除
处于活动状态,因此当按下后退按钮时,它们不会处于“暂停”状态
不为现有片段调用pressed onCreateView(
添加新片段之前存在的片段)。依据
片段的生命周期事件onPause、onResume、onCreateView和其他
替换时将调用生命周期事件,但不会调用
在add的情况下调用
旋转设备会为我的案例中的每个片段调用onCreateView。即使调用了onCreateView,FragmentC也没有显示。有人解决了这个问题吗?