Search code examples
javaandroidandroid-tabbed-activity

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


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


Solution

  • 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.