Android 碎片事务回压回撤问题

Android 碎片事务回压回撤问题,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,我有一个活动和四种类型的片段A,B,C,D 首先,我将在HomeActivity-(片段1)中显示fragA的一个实例 从FRAGMENT1中,我将加载Fragmb的一个实例(Fragment2)(\u此事务添加到backstack中) 从片段2我将加载fragA的新实例(片段3)(不是旧实例),(此事务不会添加到backstack中)(因此片段2应该被销毁) 现在我将按下backButton,这将转到片段1(因此片段3将像我想的那样被销毁) 并加载Backback中的碎片1。在这一点上,

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

  • 首先,我将在HomeActivity-(片段1)中显示fragA的一个实例

  • 从FRAGMENT1中,我将加载Fragmb的一个实例(Fragment2)(\u此事务添加到backstack中)

  • 从片段2我将加载fragA的新实例(片段3)(不是旧实例),(此事务不会添加到backstack中)(因此片段2应该被销毁)

  • 现在我将按下backButton,这将转到片段1(因此片段3将像我想的那样被销毁)

    并加载Backback中的碎片1。在这一点上,, 我们现在可以假设backbackback中没有任何片段(这意味着如果我单击back,它将关闭应用程序)

  • 现在从这个片段1开始,我将转到片段4(fragC实例)(我将把这个事务添加到backstack中)

  • 现在我要按BackButton

  • 现在理论上,它应该加载片段1(fragA的实例)。但是片段3(fragA的实例)正在加载

  • (我想知道碎片3是如何出现在图片中的,它被删除了,而没有添加到backbackback中)

    如果我更进一步,其他类似的问题也会出现

    这是我在onbackpressed中的代码

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

    我认为在
    onBackPressed
    的实现中,不需要调用
    popbackinstallent()
    。它一直对我有效,没有手动弹出后挡板。(例如,我在
    onBackPressed()
    中做的一件事就是确保NavigationDrawer已关闭)


    因此,您可能会弹出backbackback两次:一次是自动完成的,另一次是通过调用
    popbackbackshortly()
    触发的。在切换片段时,这可能会导致一些问题和意外行为。

    我认为在实现
    onBackPressed
    时,不需要调用
    popbackinstally()
    。它一直对我有效,没有手动弹出后挡板。(例如,我在
    onBackPressed()
    中做的一件事就是确保NavigationDrawer已关闭)


    因此,您可能会弹出backbackback两次:一次是自动完成的,另一次是通过调用
    popbackbackshortly()
    触发的。这可能会导致切换片段时出现一些问题和意外行为。

    是的,我曾经遇到过同样的问题。正如我记忆中的那个样,在添加或替换新事务之前,您应该删除片段事务。交易。删除…这样就可以了?或者不是?你可能在错误的地方做了。你能告诉我在哪里做,怎么做吗?你在哪里加载新的碎片?是的,我曾经遇到过同样的问题。正如我记忆中的那个样,在添加或替换新事务之前,您应该删除片段事务。交易。删除…这样就可以了?或者不是?你可能在错误的地方做了。你能告诉我在哪里做,怎么做吗?你在哪里加载新的片段