Reputation: 39
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
Upvotes: 1
Views: 1759
Reputation: 2900
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);
}
}
Upvotes: 0
Reputation: 2235
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.
Upvotes: 1