我目前有一个包含3个可用片段的应用程序,这些片段已替换为底部导航栏。
这是我按下导航栏时调用的方法:
private void setFragment(int id, boolean first) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.cross_fade, 0);
switch (id) {
case R.id.action_discover:
fragmentTransaction.replace(R.id.frameLayout, fragmentDiscover);
if(!first) {
fragmentTransaction.addToBackStack(TAG_DISCOVER);
}
break;
case R.id.action_favorites:
fragmentTransaction.replace(R.id.frameLayout, fragmentFavorites);
if(!first) {
fragmentTransaction.addToBackStack(TAG_FAVORITES);
}
break;
case R.id.action_playlist:
fragmentTransaction.replace(R.id.frameLayout, fragmentPlaylist);
if(!first) {
fragmentTransaction.addToBackStack(TAG_PLAYLIST);
}
break;
}
fragmentTransaction.commit();
if(!first) {
appBarLayout.setExpanded(true, true);
}
}
当我在这里回复时:
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStackImmediate(fragmentTag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
appBarLayout.setExpanded(true, true);
} else {
super.onBackPressed();
}
}
我想要的是什么:
例如,在我打开应用程序后,它将显示片段A(1),然后我打开片段B(2) - > C(3) - > B(4) - > C(5)。如果我按下,由于当前活动片段是C(5),那么它将擦除后栈中的所有片段C(5和3),并移动到片段B(前一个从5 = 4)。在我再次按下之后,它将删除所有片段B(4和2),然后返回到片段A.如果我再次按下它将退出。
简而言之:
A(1) - > B(2) - > C(3) - > B(4) - > C(5)
A(1) - > B(2) - > B(3)
A(1)
退出
即使使用了FragmentManager.POP_BACK_STACK_INCLUSIVE,我得到了:
A(1) - > B(2) - > C(3) - > B(4) - > C(5)
A(1) - > B(2) - > C(3) - > B(4)
A(1) - > B(2) - > C(3)
A(1) - > B(2)
A(1)
退出
对不起解释,有人知道我做错了吗?