How to switch back to previous tab on back pressed in an tabbed activity

1.6k Views Asked by At

I have a tabbed activity 1 to 5. If I move from 3 to 5 then on back pressed I want to switch back from 5 to 3 i.e. on back pressed I want to move back to the previous tab. Please help

2

There are 2 best solutions below

5
On BEST ANSWER

Use the below code to achieve it.(Code is tested also.)

1.Initialise a List of integers and a boolean value;

private boolean isBackPressed = false;  
private boolean isBackPressedOnce = false;   
private List<Integer> tabsInBack = new ArrayList<>();

2.Now your onTabSelectedListener has to be like

tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
      @Override
      public void onTabSelected(TabLayout.Tab tab) {
        if(!isBackPressed){
          tabsInBack.add(tab.getPosition());}
        else {
              isBackPressed = false;}              
      }

      @Override
      public void onTabUnselected(TabLayout.Tab tab) {

      }

      @Override
      public void onTabReselected(TabLayout.Tab tab) {

      }
    });

3(i).Now your onBackPressed() function has to be,(One tab back then close)

    @Override
      public void onBackPressed() {
        isBackPressed = true;
        if (tabsInBack != null && tabsInBack.size() > 0) {
          if (tabs.getSelectedTabPosition() == tabsInBack.get(tabsInBack.size() - 1)) {
            tabsInBack.remove(tabsInBack.size() - 1);

          }
          if (tabsInBack != null && tabsInBack.size() > 0) {
            tabs.getTabAt(tabsInBack.get(tabsInBack.size() - 1)).select();
            tabsInBack.remove(tabsInBack.size() - 1);

          } else {
            super.onBackPressed();
          }
        } else {
          super.onBackPressed();
        }
      }

3(ii).Now your onBackPressed() function has to be,(Back to all selected tabs and then close)

    @Override
      public void onBackPressed() {
        isBackPressed = true;
        if (tabsInBack != null && tabsInBack.size() > 0) {
          if (tabs.getSelectedTabPosition() == tabsInBack.get(tabsInBack.size() - 1)) {
            tabsInBack.remove(tabsInBack.size() - 1);

          }
          if (tabsInBack != null && tabsInBack.size() > 0) {
            tabs.getTabAt(tabsInBack.get(tabsInBack.size() - 1)).select();
            tabsInBack.remove(tabsInBack.size() - 1);
             if(isBackPressedOnce )
               {
                 super.onBackPressed();
               }
            else
               {
                 isBackPressedOnce = true;
               }
          } else {
            super.onBackPressed();
          }
        } else {
          super.onBackPressed();
        }
      }

Let me know whether it helped or not.

0
On

This works for me :) It works exactly like whatsapp

@Override public void onBackPressed() {

    //If first tab is open, then quit
    if (viewPager.getCurrentItem() == 0) {

        super.onBackPressed();
    }else {

        //If any other tab is open, then switch to first tab
        viewPager.setCurrentItem(0);
    }

}