我有3个片段A,B,C和I从A到B替换,然后是C. 但我需要反过来从C到A.我的意思是不在历史堆栈中包含片段B,这里是模式代码
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(container, fragment);
transaction.addToBackStack(null);
transaction.commit();
答案 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)
}