9

È possibile rimuovere/ripristinare la barra delle schede dalla barra delle azioni in modo dinamico?ActionBar Android: mostra/nascondi le schede dinamicamente?

Fino ad ora l'ho fatto cambiando la modalità di navigazione della barra delle azioni. Ho usato seguente codice per rimuovere e ripristinare la barra delle schede:

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

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

che funziona, ma c'è un grosso problema: Ogni volta che io chiamo setNavigationMode, onTabSelected viene chiamato nel TabListener e la scheda attualmente aperto nel mese vengono ricreate.

risposta

1

Questo funziona come previsto, poiché la scheda viene selezionata perché non veniva visualizzata. Ti suggerisco di fare da solo il controllo in TabListener.

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

Per rimuovere le schede ActionBar in modo dinamico, è sufficiente:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 

per aggiungerli al volo, semplicemente:

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

Per il secondo caso, l'ipotesi è che dopo aver impostato la modalità di navigazione, potrete anche aggiungere schede, alla barra delle azioni, simile a questo:

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