如何清除碎片回堆?

时间:2019-04-28 07:46:04

标签: java android fragment-backstack

3个片段:

  • FragmentA:根片段(实现IRootFragment),由BottomNavigationView打开;
  • FragmentB:通过按钮从A片段打开;
  • FragmentC:通过按钮从B片段打开;

我可以通过BottomNavigationView从C-fragment转到A-fragment,我必须清除堆栈,但不知道为什么它不起作用。 当我从第一个片段移到第二个片段并按回按钮时,片段彼此重叠,直到退出应用程序。

如果我按后退按钮转到C-> B-> A,然后按后退按钮,则一切正常。

打开片段的代码:

  fragmentManager
                .beginTransaction()
                .replace(R.id.fl_container, new FragmentA())               
                .commit();
  fragmentManager
                .beginTransaction()
                .replace(R.id.fl_container, new FragmentB())
                .addToBackStack(null)               
                .commit();
  fragmentManager
                .beginTransaction()
                .replace(R.id.fl_container, new FragmentC())  
                .addToBackStack(null)             
                .commit();

BackPressed:

 Fragment fragment = fragmentManager.findFragmentById(R.id.fl_container);
        if (fragment instanceof IRootFragment) {        
            if (fragmentManager.getBackStackEntryCount() > 0) {
                getSupportFragmentManager().popBackStack(                     
                fragmentManager.getBackStackEntryAt(0).getId(),
             FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }
            super.onBackPressed();
        } else {
            fragmentManager.popBackStackImmediate();
        }

我正在尝试所有这些方法:Is this the right way to clean-up Fragment back stack when leaving a deeply nested stack?

fragmentManager.getBackStackEntryCount()始终> 0

0 个答案:

没有答案