如何解除后栈中的片段

时间:2015-03-06 08:50:30

标签: android fragment fragmenttransaction

我有3个片段A,B,C和I从A到B替换,然后是C. 但我需要反过来从C到A.我的意思是不在历史堆栈中包含片段B,这里是模式代码

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(container, fragment);
transaction.addToBackStack(null);
transaction.commit();

4 个答案:

答案 0 :(得分:0)

FragmentTanscation B更改为Fragment C时,请勿将Fragment添加到BackStack。因此,在backPress上,您将直接获得Fragment A。

答案 1 :(得分:0)

当您将片段A替换为片段B时,应添加transaction.addToBackStack(null)以将A添加到堆栈

但是当用C替换B时,不要写addToBackStack因此不会添加B,并且当按下C中的后退按钮时,您将能够导航回A

答案 2 :(得分:0)

如果您的代码对于所有片段都是通用的,那么您必须编写一些代码来排除将一个片段添加到Backstack中。

应该看起来像这样

private void addFragments() {
    Fragment a = new A();
    Fragment b = new B();
    Fragment c = new C();

    doFragmentTransaction(a, true);
    doFragmentTransaction(b, false);
    doFragmentTransaction(c, true);
}

private void doFragmentTransaction(Fragment fragment, boolean addToBackstack) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(container, fragment);

    if (addToBackstack)
        transaction.addToBackStack(null);

    transaction.commit();
}

答案 3 :(得分:0)

使用此代码将片段从C转换为A on onBackpressed方法:

FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {    

FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
}