Is it possible to remove/restore the tab bar from the action bar dynamically?
Up to now I did this by changing the navigation mode of the action bar. I used following code to remove and restore the tab bar:
@Override
public void restoreTabs() {
getSupportActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.supportInvalidateOptionsMenu();
}
@Override
public void removeTabs() {
getSupportActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
this.supportInvalidateOptionsMenu();
}
That works, but there is a big problem: Everytime I call setNavigationMode
, onTabSelected
is called in the TabListener
and the currently opend tab gets recreated.
To remove the actionbar tabs dynamically, you simply need:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
To add them on the fly, simply do:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
For the second case, the assumption is that after setting the navigation mode, you will also add tabs, to the action bar, similar to this:
for (int resourceId : tabs) {
actionBar.addTab(actionBar.newTab().setText(resourceId)
.setTabListener(this));
}
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
invalidateOptionsMenu();
}
This is working as intended, since the tab is being selected because it was not appearing.
I suggest you to do by your own the control in TabListener.