Android: ¿Cómo activar / desactivar el elemento del menú de opciones al hacer clic en el botón?

Puedo hacerlo fácilmente cuando estoy usando los métodos onCreateOptionsMenu o onOptionsItemSelected .

Pero tengo un botón en algún lugar de la pantalla, y al hacer clic en ese botón, debería habilitar / deshabilitar los elementos del menú contextual.

Gracias…

De todos modos, la documentación cubre todas las cosas.

Cambio de elementos de menú en tiempo de ejecución

Una vez que se crea la actividad, se llama al método onCreateOptionsMenu() solo una vez, como se describió anteriormente. El sistema guarda y reutiliza el Menu que defina en este método hasta que se destruya su actividad. Si desea cambiar el menú de Opciones en cualquier momento después de que se creó por primera vez, debe anular el método onPrepareOptionsMenu() . Esto le pasa el objeto de menú tal como existe actualmente. Esto es útil si desea eliminar, agregar, deshabilitar o habilitar elementos del menú según el estado actual de su aplicación.

P.ej

 @Override public boolean onPrepareOptionsMenu (Menu menu) { if (isFinalized) { menu.getItem(1).setEnabled(false); // You can also use something like: // menu.findItem(R.id.example_foobar).setEnabled(false); } return true; } 

En Android 3.0 y versiones posteriores, se considera que el menú de opciones siempre está abierto cuando los elementos del menú se presentan en la barra de acciones. Cuando ocurre un evento y desea realizar una actualización de menú, debe llamar a invalidateOptionsMenu() para solicitar que el sistema llame onPrepareOptionsMenu() .

En todas las versiones de Android, la manera más fácil: use esto para MOSTRAR un ícono de acción de menú como deshabilitado Y para hacer que FUNCTION también esté deshabilitado:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.menu_my_item); if (myItemShouldBeEnabled) { item.setEnabled(true); item.getIcon().setAlpha(255); } else { // disabled item.setEnabled(false); item.getIcon().setAlpha(130); } } 

Puede guardar el elemento como una variable al crear el menú de opciones y luego cambiar sus propiedades a voluntad.

 private MenuItem securedConnection; private MenuItem insecuredConnection; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.connect_menu, menu); securedConnection = menu.getItem(0); insecuredConnection = menu.getItem(1); return true; } public void foo(){ securedConnection.setEnabled(true); } 

simplificar la versión de @Vikas

 @Override public boolean onPrepareOptionsMenu (Menu menu) { menu.findItem(R.id.example_foobar).setEnabled(isFinalized); return true; } 

la mejor solución cuando se realiza en el cajón de navegación

 @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.setGroupVisible(0,false); return true; } 

En general, puede cambiar las propiedades de sus vistas en tiempo de ejecución:

 (Button) item = (Button) findViewById(R.id.idBut); 

y entonces…

 item.setVisibility(false) 

pero

si desea modificar la visibilidad de las opciones desde ContextMenu, presione su botón, puede activar un indicador, y luego en onCreateContextMenu puede hacer algo como esto:

  @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(R.string.context_title); if (flagIsOn()) { addMenuItem(menu, "Option available", true); } else { Toast.makeText(this, "Option not available", 500).show(); } } 

espero que esto ayude