I currently have an apps with 3 available fragments that replaced with bottom nav bar.
Here's my method called when my navbar pressed:
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);
}
}
And when here's my onbackpressed:
@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();
}
}
What I want:
For example after I opened the app, it will show fragment A(1), then I open fragment B(2) -> C(3) -> B(4) -> C(5). If I pressed back, since the current active fragment is C(5), then it will erase all the fragment C(5 and 3) at the back-stack, and move to fragment B(previous from 5 = 4). After I pressed back again, then it will remove all the fragment B(4 and 2), and back to fragment A. And will exit if I pressed back again.
In short:
A(1) -> B(2) -> C(3) -> B(4) -> C(5)
A(1) -> B(2) -> B(3)
A(1)
Exit
Even after using FragmentManager.POP_BACK_STACK_INCLUSIVE, what I get:
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)
Exit
Sorry for the bad explanation, anyone know what I did wrong?