Usando invalidateOptionsMenu () con el sistema de inicio de sesión (Android)

Estoy tratando de obtener mi menú de opciones para volver a dibujar (desde dentro de la misma actividad) que yo llamo un diálogo de inicio de sesión.

Aquí está la configuración. Desde cualquier actividad de la aplicación, el usuario puede hacer clic en el menú de desbordamiento / opciones y hacer clic en Inicio de sesión. Se abrirá un cuadro de diálogo y es de esperar que se logren con éxito. El cuadro de diálogo finaliza (). Si hace clic en el menú todavía dice "login" – y no "logout". Parece que no estoy usando invalidateOptionsMenu derecho? Aquí está el código:

Opciones Código de menú desde donde se llama el cuadro de diálogo:

case R.id.Login: Intent i = new Intent(this, Login.class); startActivityForResult(i, 0); return true; 

Login.class es un diálogo. Cuando el usuario hace clic en el botón Enviar en el diálogo, esto sucede:

  // set log in var's here Intent in = new Intent(); setResult(1, in); finish(); 

Entonces de vuelta en la actividad original:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == 1) { MyActivity.this.invalidateOptionsMenu(); } } 

Usando un Toast, he confirmado que "1" está siendo llamado.

¿Cómo invalido y vuelvo a dibujar el menú para que luego incluya la opción de cierre de sesión (ya que el usuario ya está conectado?)

EDITAR:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem Rules = menu.findItem(R.id.Rules); MenuItem About = menu.findItem(R.id.About); MenuItem Profile = menu.findItem(R.id.Profile); MenuItem Login = menu.findItem(R.id.Login); MenuItem Logout = menu.findItem(R.id.Logout); // set the menu options depending on login status if (LoggedStatus == true) { // show the log out option Logout.setVisible(true); Login.setVisible(false); Rules.setVisible(true); Profile.setVisible(true); About.setVisible(true); } else { // show the log in option Logout.setVisible(false); Login.setVisible(true); Rules.setVisible(true); Profile.setVisible(false); // hide About.setVisible(true); } return true; } 

Me gustaría echar un vistazo a esto: http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

Llamar invalidateOptionsMenu() en Android 3.0+ llamará onPrepareOptionsMenu() . Un Menu se pasa a ese método y desea realizar los cambios en el menú que utiliza ese objeto, ya sea agregar o quitar elementos de menú.

Tenga esto en cuenta para onPrepareOptionsMenu() :

Debe devolver true para que el menú se muestre; Si devuelve false no se mostrará.

Editar: lo siento de alguna manera se perdió su código en la parte inferior. Déjame comprobar esto muy rápido.

Edit2: Estás olvidando llamar a super.onPrepareOptionsMenu(menu);

Edit3: Ahora que ha determinado que el menú funciona, lo único que podría estar causando que no se muestre LoggedStatus . Asegúrese de que se está modificando adecuadamente debe resolver todo.

@KickingLettuce

Ejecutarlo en el tipo MenuItem. Android no puede determinar si "setVisible" es aplicable o puede invocar para la variable "Reglas".

Reglas MenuItem = (MenuItem) menu.findItem (R.id.Rules);

que funcionará. Espero eso ayude 🙂

  • Android - Uso correcto de invalidateOptionsMenu ()
  • Volver a usar el código del menú Opciones
  • No se puede acceder a android / drawable Icon-Resource
  • ¿Cómo ordenar elementos de menú en el menú de opciones de una aplicación de Android?
  • Iconos del sistema Android semi-transparentes
  • Cómo agregar el menú de opciones de barra de acciones en Fragmentos de Android
  • Ocultar MenuItem en algunos fragmentos
  • OnCreateOptionsMenu () llamando a super
  • NullPointerException en rotación durante el comando dispatchCreateOptionsMenu, la traza de pila no incluye ninguna función en mi aplicación
  • Android: cambia el ancho del menú de desbordamiento
  • Android - cambia dinámicamente el menú de opciones, pero al inflar desde XML
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.