2016-03-02 85 views
1

我有一个活动ActivityA和3个片段FragmentA,FragmentBFragmentC屏幕旋转后不显示片段

要添加FragmentA,我用replace,其中fragmentFragmentA一个新的实例:

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(); 
} 

要添加FragmentBFragmentC,我使用addaddToBackStack,其中fragment是新实例的FragmentBFragmentC

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在这种情况下不可见?

回答

1

我觉得这个回答另一个问题是你的答案太:Difference between add(), replace(), and addToBackStack()

它说:添加和更换之间

还有一个重要的区别:更换 删除现有的片段,并增加了一个新的分段。这意味着当 你按下返回按钮时,被取代的片段将被创建 并调用其onCreateView。而添加保留了现有的 片段,并添加了一个新片段,这意味着现有片段将为 活动,并且它们不会处于“已暂停”状态,因此当后退按钮为 时,按下onCreateView不会调用现有片段( 片段在添加新片段之前是在那里)。在 片段的生命周期事件onPause,onResume,onCreateView和其他 生命周期事件将在替换的情况下被调用,但它们不会被添加时调用 。

+0

旋转设备调用onCreateView为我的情况下的每个片段。即使调用了onCreateView,FragmentC也不会显示。 – catsfw