2012-09-14 59 views
9

C'è un modo per disabilitare, nascondere, aggiungere/rimuovere voci di menu in ActionBar in modo dinamico? Ad esempio, un'azione viene disabilitata finché l'utente non riempie un numero di telefono valido in un'attività.Controllo dinamico dell'azione/voci di menu in ActionBar

Non ho trovato alcun metodo utile nell'API di ActionBar, l'unico modo sembra utilizzare una vista personalizzata in ActionBar.

risposta

20

A dire ActionBar per aggiornare le sue voci di menu: invalidateOptionsMenu()

poi per attivare/disattivare le voci di menu:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem item= menu.findItem(R.id.men_1); 
    //depending on your conditions, either enable/disable 
    item.setEnabled(false); 
    super.onPrepareOptionsMenu(menu); 
    return true; 
} 

e per nascondere la barra delle azioni si dispone:

getActionBar().hide(); 
+1

'onPrepareOptionsMenu' deve tornare' valore booleano', è necessario restituire true per il menu da visualizzare; se restituisci false non verrà mostrato. –

+7

Se si utilizza la libreria di supporto e 'ActionBarActivity' è necessario utilizzare [' supportInvalidateOptionsMenu() '] (http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html# supportInvalidateOptionsMenu% 28% 29) –

0

altro opzione: avere un campo nell'attività che memorizza il menu. . In questo modo è possibile chiamare getMenuInflater() gonfiano() e menu.clear() da qualsiasi luogo che si desidera in questa attività

Così, sembra qualcosa di simile:

class MyActivity extends ActionBarActivity { 

    Menu actionBar; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     actionBar = menu; 
     return true; 
    } 

    //Possible usage 
    void showActionBar1() { 
     getMenuInflater().inflate(R.menu.menu_1, actionBar); 
     actionBar.findItem(R.id.menu_1_btn_1).setOnMenuItemClickListener(); 
    } 

    void showActionBar2() { 
     getMenuInflater().inflate(R.menu.menu_2, actionBar); 
     ... 
    } 

    void clearActionBar() { 
     if (actionBar != null) actionBar.clear(); 
    } 
Problemi correlati