Android – Activación de MenuItems por código

Necesito habilitar un MenuItem cuando vuelva una pantalla anterior (Actividad).

He probado este código:

… ((MenuItem) findViewById (R.id.menu_how)). SetEnabled (true); …

Pero se inicia una excepción de puntero nulo.

BTW, el menu_how se establece en false en xml; Y el código es parte de la llamada onActivityResult (int requestCode, int resultCode, Intent data).

Intente usar menu.findItem(R.id.menu_how) en onCreateOptionsMenu y guarde una referencia para uso posterior.

Esto debería funcionar bien con enabled , sin embargo, he encontrado que establecer un elemento de menú a invisible en el XML significa que no se puede mostrar / ocultar mediante programación.

He encontrado algo en el sitio de desarrollo de Android que podría ser útil (busque la sección "Cambiar elementos de menú en tiempo de ejecución")

Se dice que el método onCreateOptionsMenu() se dispara sólo cuando se crea el menú para la actividad y ocurre cuando se inicia esta actividad. Por lo tanto, si desea cambiar los elementos del menú después de que se creó el menú / actividad, debe sustituir el método onPrepareOptionsMenu() . Busque en el enlace los detalles completos.

EDITAR:

Sólo lo hizo y funciona bien. Estoy usando una boolean var por menuItem que representa si este elemento debe estar habilitado o no. Este es mi código:

 /*************************************Game Menu**************************************/ @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.gm_new_game: //newGame(); return true; case R.id.gm_stand_up: //some code when "gm_stand_up" button clicked.. return true; case R.id.gm_forfeit: //some code when "gm_forfeit" button clicked.. return true; case R.id.gm_surrender: //some code when "gm_surrender" button clicked.. return true; case R.id.gm_exit_table: exitTableCommand(); return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.gm_forfeit).setEnabled(forfeitMenuButtonIsEnabled); menu.findItem(R.id.gm_surrender).setEnabled(surrenderMenuButtonIsEnabled); menu.findItem(R.id.gm_new_game).setEnabled(newGameMenuButtonIsEnabled); menu.findItem(R.id.gm_stand_up).setEnabled(standUpMenuButtonIsEnabled); return super.onPrepareOptionsMenu(menu); } 

¿Dónde está llamando esto? (Lo siento, no leer con cuidado) Creo que tienes que llamar después de que el menú se infla (por lo general en OnCreateOptionsMenu). Para hacer esto, puede establecer una variable a true cuando la otra Actividad devuelve, y luego hacer ((MenuItem)findViewById(R.id.menu_how)).setEnabled(mMyBooleanField) en OnCreateOptionsMenu después de la llamada a inflater.inflate.

Editar: Para lograr esto en código, podría ser algo como esto:

En la parte superior de la clase (junto con todos los demás miembros de la clase):
Boolean mEnableMenuItem = false;

En OnCreateOptionsMenu:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_main, menu); ((MenuItem)findViewById(R.id.menu_how)).setEnabled(mEnableMenuItem );

En OnActivityResult:
mEnableMenuItem = true;

Mantenga una referencia a Menú en su actividad:

 private Menu mMenu; 

Entonces:

 public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_note, menu); mMenu = menu; return true; } 

Ahora, para acceder a elementos de menú en cualquier parte de su actividad, utilice un código similar al siguiente:

 mMenu.findItem(R.id.menu_how).setVisible(false); 

o

 mMenu.findItem(R.id.menu_how).setEnabled(true); 
  • Android MenuItem Obtener el método de showAsAction
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.