¿Cómo oculto un elemento de menú en la barra de acciones?

Resuelto Stir Zoltán asked hace 54 años • 27 respuestas

Tengo una barra de acciones con un elemento de menú. ¿Cómo puedo ocultar/mostrar ese elemento del menú?

Esto es lo que estoy intentando hacer:

MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
Stir Zoltán avatar Jan 01 '70 08:01 Stir Zoltán
Aceptado

Señale MenuItemdicho elemento, llámelo setVisiblepara ajustar su visibilidad y luego llame invalidateOptionsMenu()a su actividad para que el menú ActionBar se ajuste en consecuencia.

Actualización: A MenuItemno es una vista normal que forme parte de su diseño. Es algo especial, completamente diferente. Su código regresa nully itemeso está causando el bloqueo. Lo que necesitas en su lugar es hacer:

MenuItem item = menu.findItem(R.id.addAction);

Aquí está la secuencia en la que debe llamar: primero llame invalidateOptionsMenu()y luego dentro onCreateOptionsMenu(Menu)obtenga una referencia al MenuItem (llamando menu.findItem()) y setVisible()llámelo

K-ballo avatar May 21 '2012 21:05 K-ballo

Encontré un anexo a esta pregunta:

Si desea cambiar la visibilidad de los elementos de su menú sobre la marcha, solo necesita configurar una variable miembro en su actividad para recordar que desea ocultar el menú y llamar invalidateOptionsMenu()y ocultar los elementos en su onCreateOptionsMenu(...)método anulado.

//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == HIDE_MENU)
    {
        for (int i = 0; i < menu.size(); i++)
            menu.getItem(i).setVisible(false);
    }
}

En mi ejemplo he ocultado todos los elementos.

P1r4nh4 avatar Nov 27 '2012 12:11 P1r4nh4

Sí.

  1. Puede establecer una bandera/condición.
  2. Llama invalidateOptionsMenu()cuando quieras ocultar la opción. Esto llamará onCreateOptionsMenu().
  3. En onCreateOptionsMenu(), verifique la bandera/condición y muéstrela u ocultela de la siguiente manera:
MenuItem item = menu.findItem(R.id.menu_Done);

if (flag/condition)) {
  item.setVisible(false); 
} else { }
suhas_sm avatar Oct 27 '2012 10:10 suhas_sm