清除片段backstack而不调用弹出片段的onCreateView

时间:2016-12-16 03:51:18

标签: android android-fragments fragment-backstack

我的应用有3个UI级别,每个级别都有自己的片段,A - > B - > C。 我希望可选允许我的应用用户直接导航到顶级片段,即来自C - > A不调用B. 即,如果他们按下后退按钮,我仍然希望允许用户从C-> B开始,但是在C片段中,我有一个" Home"按钮,它直接将它们带到A.这是我要冲洗后台堆栈的操作。 另外,我希望用户能够使用后退按钮从B-> A开始,因此我将A和B都添加到后台堆栈。

我尝试了this SO post中的选项,但在每种情况下,即使我使用fm_.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

,也会为每个片段调用onCreateView

同时检查了这个帖子,似乎建议使用popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)

任何人都可以建议一种方法来弹出整个Backstack而不需要在弹出的片段上调用onCreateView吗?

3 个答案:

答案 0 :(得分:1)

不要添加backStack行来从片段B-> C

从A-> B开始使用

HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this);
    getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.LL_Fragment, highlightFragment) // LL_Fragment is container
    .addToBackStack(null)
    .commit();

进入B-> C使用

  HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this);
        getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.LL_Fragment, highlightFragment)
        .commit();

不要添加行.addtobackstack(null)

这对我有用

答案 1 :(得分:0)

我估计您正在使用替换片段。 如果你不想弹回

,尝试使用begintransaction.hide / show来管理1个活动中的许多片段
//on Activity
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(containerId, new FragmentA(), fragmentA.getClass().getSimpleName());
fragmentTransaction.commit();
//inside fragment A to jump fragment without PopBackStack
getFragmentManager().beginTransaction().hide(this).commit();
getFragmentManager().beginTransaction().show(new FragmentB()).commit();

答案 2 :(得分:0)

当需要在BottomNavigationView

中清除标签交换机的后栈时,这对我有用
public void clearBackStack() {

    int backStackEntryCount = mFragmentActivity
                                    .getSupportFragmentManager()
                                    .getBackStackEntryCount();

    for (int i = 0; i < backStackEntryCount; i++) {
        mFragmentActivity.getSupportFragmentManager().popBackStack();
    }
}