【发布时间】:2014-07-03 12:01:47
【问题描述】:
在我的应用中有 5 个片段(FragA、FragB、FragC、FragD、FragE)
步骤 1. 应用启动时 FragA 处于打开状态
第 2 步。我点击抽屉布局项目打开 FragB 然后 FragB 是打开的
第 3 步。我点击抽屉布局项打开 FragC,然后 FragC 就打开了
第 4 步。我点击抽屉布局项打开 FragB,然后 FragB 就打开了
第 5 步。我单击返回按钮,它从 FragB 返回到 FragA 而不是 FragC。为什么?
我认为在第 4 步将 FragB 放在前面并销毁 FragC(不是重新排序后堆的位置)
我想把选定的片段放在前面,然后对 backstack 的位置进行排序(而不是销毁)
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();
}
}
【问题讨论】:
标签: android android-fragments back-stack