我的导航抽屉中列出了许多页面/片段,用户可能经常在这些页面/片段之间切换,我希望它们在后台中,以便他们可以导航回来,但我只想在后台堆栈中每个片段的一个实例用户不必按下疯狂的次数退出应用程序.我无法弄清楚如何在没有删除页面的情况下有效地"重新排序"后台堆栈.
目前,当我更改页面时,我正在使用此代码更改片段并确保它仅在后面的堆栈中一次
if (mFragMgr == null) {
mFragMgr = getSupportFragmentManager();
}
String backStateName = fragmentDescriptor.name();
boolean fragmentPopped = mFragMgr.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped){
mFragMgr.beginTransaction()
.remove((Fragment) mFragment)
.replace(R.id.content_frame, (Fragment) mFragment)
.addToBackStack(backStateName)
.commit();
}
Run Code Online (Sandbox Code Playgroud)
我在onBackPressed中使用此代码
@Override
public void onBackPressed() {
if (mFragMgr.getBackStackEntryCount() > 0) {
mFragMgr.popBackStackImmediate();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这意味着它删除了我不想删除的页面.例:
当我的用户在订单中访问6页A > B > C > D > E > C因为我正在进行删除时,我期望以下堆栈:
[E] [C]
[D] [D] [E]
[C] [C] [C] [D]
[B] [B] [B] [B] [B]
[A] -> [A] …Run Code Online (Sandbox Code Playgroud)