¿Cómo oculto un elemento de menú en la barra de acciones?
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();
Señale MenuItem
dicho elemento, llámelo setVisible
para ajustar su visibilidad y luego llame invalidateOptionsMenu()
a su actividad para que el menú ActionBar se ajuste en consecuencia.
Actualización: A MenuItem
no es una vista normal que forme parte de su diseño. Es algo especial, completamente diferente. Su código regresa null
y item
eso 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
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.
Sí.
- Puede establecer una bandera/condición.
- Llama
invalidateOptionsMenu()
cuando quieras ocultar la opción. Esto llamaráonCreateOptionsMenu()
. - 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 { }