0

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?

user3576118
  • 375
  • 1
  • 5
  • 24

0 Answers0