FragmentTransaction backPressed BackStack问题

时间:2016-03-04 13:28:00

标签: android android-fragments fragment-backstack

我有一个活动,有四种类型的片段A,B,C,D

  1. 首先,我将在HomeActivity中展示fragA的一个实例 - (FRAGMENT 1)

  2. 来自FRAGMENT1的
  3. 我将加载一个fragB实例(FRAGMENT 2)(_此事务已添加到backstack中)

  4. 来自FRAGMENT 2的
  5. 我将加载新的fragA实例(FRAGMENT 3)(不是旧版本),(此事务不会添加到backstack中)(因此应该销毁FRAGMENT 2)

  6. 现在我按回按钮,这将转到碎片1(因此我认为碎片3将被销毁)

    从后台加载

    和fragment1。在此刻, 我们现在可以假设在backstack中没有片段。(这意味着如果我点击它会关闭应用程序)

  7. 现在从这个FRAGMENT 1,我将转到FRAGMENT 4(fragC的实例),(这个交易我将添加到backstack)。

  8. 现在我按BackButton,

  9. 从理论上讲,它应该加载FRAGMENT 1(fragA的实例)。但FRAGMENT 3(fragA的实例)正在加载。

  10. (我想知道FRAGMENT3是如何进入画面的,它已被移除而未添加到后台堆栈中。)

    如果我走得更远,

    和其他类似的问题就会出现。

    这是我在onbackpressed中的代码

      @Override
         public void onBackPressed() {
    
        if(getSupportFragmentManager().getBackStackEntryCount() > 1){
    
            getSupportFragmentManager().popBackStackImmediate();
        }else {
            super.onBackPressed();
    
        }
    }
    

1 个答案:

答案 0 :(得分:0)

我认为您不需要在onBackPressed的实施中致电onBackPressed()。它总是适用于我而无需手动弹出BackStack。 (我在popBackStackImmediately()做的一件事就是确保关闭NavigationDrawer。)

所以你可能会弹出两次背斜:一次是自动完成,一次是通过调用GameRequestContent来触发它。切换片段时,这可能会导致一些问题和意外行为。