9

Ist es möglich, die Tableiste dynamisch von der Aktionsleiste zu entfernen/wiederherzustellen?Android ActionBar: Tabs dynamisch ein-/ausblenden?

Bisher habe ich dies getan, indem ich den Navigationsmodus der Aktionsleiste geändert habe. Früher habe ich folgenden Code zu entfernen und die Tab-Leiste wieder her:

@Override 
public void restoreTabs() {  
    getSupportActionBar() 
    .setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    this.supportInvalidateOptionsMenu(); 
} 

@Override 
public void removeTabs() {  
    getSupportActionBar() 
    .setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
    this.supportInvalidateOptionsMenu(); 
} 

das funktioniert, aber es ist ein großes Problem: Jedesmal, wenn ich setNavigationMode nennen, onTabSelected im TabListener genannt wird und die zur Zeit opend Registerkarte neu erstellt wird.

Antwort

1

Dies funktioniert wie vorgesehen, da die Registerkarte ausgewählt wird, weil sie nicht angezeigt wurde. Ich schlage vor, dass Sie die Steuerung in TabListener selbst vornehmen.

3
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(); 
} 
4

die ActionBar Tabs dynamisch zu entfernen, müssen Sie einfach:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 

Um sich schnell hinzufügen, einfach tun:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

Für den zweiten Fall, ist die Annahme, Nachdem Sie den Navigationsmodus eingestellt haben, fügen Sie der Aktionsleiste ähnliche Registerkarten hinzu:

for (int resourceId : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(resourceId) 
       .setTabListener(this)); 
}