2012-09-14 12 views
9

¿Hay alguna forma de desactivar, ocultar, agregar o eliminar elementos de menú de forma dinámica en ActionBar? Por ejemplo, una acción está deshabilitada hasta que el usuario complete un número de teléfono válido en una actividad.Control dinámico de elementos de acción/menú en ActionBar

No encontré ningún método útil en la API de ActionBar, la única forma parece ser usar una vista personalizada en ActionBar.

Respuesta

20

A decir Barra de acciones para refrescar sus elementos de menú: invalidateOptionsMenu()

a continuación para habilitar/deshabilitar elementos de menú:

@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; 
} 

y para ocultar la barra de acción tiene:

getActionBar().hide(); 
+1

'' onPrepareOptionsMenu' debe devolver valor booleano', debe devolver verdadero para que se muestre el menú; si devuelve falso, no se mostrará. –

+7

Si está utilizando la biblioteca de soporte y 'ActionBarActivity' necesitará usar [' supportInvalidateOptionsMenu() '] (http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html# supportInvalidateOptionsMenu% 28% 29) –

0

Otro opción: tener un campo en la Actividad que almacena el Menú. . De esta manera es posible llamar getMenuInflater() inflar() y menu.clear() desde cualquier lugar que desee en esta actividad

Por lo tanto, se ve algo como esto:

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(); 
    } 
Cuestiones relacionadas