2
votes

I'm developing an android app. I have an actionbar in tab navigation mode, and three tabs that call fragments to be replaced in the frameview container.

My problem is: if the user generates a backstack while in one tab and then switches to another tab, if the back button is pressed in this state- then the backstack is popped, but the tab doesn't change, which leads to overlapping fragments (backstack fragment which belongs to Tab1 is popped/added, but Tab2 is still selected and so is its fragment).

Is there a way to make actionbar tabs react to the back button in a way that will parallel the fragment backstack?

3

3 Answers

2
votes

I solved it by adding the tabs to the backstack with names (addBackStack("MainTab");) which I chose in the TabListener, and then overridden the onBackPressed() method in the activity to recognize when a tab is going to change when the backstack is popped (by getting the top BackStackEntry's name) and used actionBar.setSelectedNavigationItem(position) accordingly.

1
votes

Instead of using addToBackStack(), override the onBackPressed() method in your activity to customize how you want the back key to behave.

0
votes

This works for me :)

@Override
public void onBackPressed() {
    if (viewPager.getCurrentItem() == 0) {
        super.onBackPressed();
    }else {
        viewPager.setCurrentItem(0);
    }
}