在我的应用程序中有5个片段(FragA,FragB,FragC,FragD,FragE)
步骤1.当应用程序启动FragA打开时
步骤2.我点击drawerlayout项目打开FragB然后FragB打开
步骤3.我点击drawerlayout项目打开FragC然后FragC打开
步骤4.我点击drawerlayout项目打开FragB然后FragB打开
步骤5.我点击后退按钮,它从FragB返回到FragA而不是FragC。为什么呢?
我认为在第4步它会将FragB带到前面并摧毁FragC(而不是重新排序后备箱位置)
我想把选定的片段带到前面并对背斜的位置进行排序(不要破坏)同样的
1.before click drawerlayout item to open FragB again
FragA-->FragB-->FragC
2.after click drawerlayout item to open FragB
FragA-->FragC-->FragB
如何修复它?
这是我用来替换片段
的方法public void replaceFragment (Fragment fragment){
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = getFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frame_container, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}
}
答案 0 :(得分:0)
这可能是因为您的第一个片段包含在默认活动中,但您可以尝试其中一个:
public abstract boolean popBackStackImmediate(int id,int flags)或
public abstract boolean popBackStackImmediate(String name,int flags)或
public abstract void putFragment(Bundle bundle,String key,Fragment fragment)
来源:片段管理器文档http://developer.android.com/reference/android/app/FragmentManager.html