Tengo una actividad que tiene 2 fragmentos. Ambos son ListFragments y ambos contribuyen MenuItems al Menú. Tengo un MenuItem que configuré el atributo android: showAsAction para que se muestre como un botón en ActionBar. Que funciona bien.
Ahora MenuItem depende del estado. Es una opción de menú Pausar / Reanudar para pausar y reanudar una cola. Mi problema es que no puedo averiguar cómo colocar su estatua inicial cuando se crea el Fragmento.
Su estado depende de si la cola está en pausa o no. Entonces tengo un AsyncTask que obtiene la cola y establece un booleano (en pausa) basado en el estado de la cola. Estoy llamando a onPrepareOptionsMenu para configurar el texto para el elemento del menú Pausa en función del último estado conocido de la cola y esto funciona muy bien si dejo MenuItem en el menú real. Toca el icono de menú y onPrepareOptionsMenu se activa y el menú se actualiza antes de que se muestre.
El problema es que si coloco ese mismo MenuItem en ActionBar (showAsAction), ¿cómo puedo forzarlo a actualizar sin tener que llamar a onPrepareOptionsMenu? Necesito poder hacer esto porque en el primer lanzamiento de la aplicación, envío una solicitud para obtener la cola, pero la tarea regresa después de que se configura y muestra la barra de acciones. Creé un controlador en mi fragmento que se llama cada vez que obtengo una actualización de la cola, pero a partir de ahí, ¿cómo puedo actualizar el texto de mi MenuItem en la barra de acciones? Parece que no puedo encontrar una manera de hacer que el menú configurado actualmente lo manipule, excepto en onPrepareOptionMenu.
Rob W.
supportInvalidateOptionsMenu()
en su lugarsupportInvalidateOptionsMenu()
ahora está en desuso; puede utilizar de forma segurainvalidateOptionsMenu()
.en mi caso:
invalidateOptionsMenu
simplemente restablecí el texto al original, pero accediendo directamente al elemento del menú y reescribiendo el texto deseado funcionó sin problemas:debido al comentario a continuación, pude acceder al elemento del menú a través del siguiente código:
fuente
mnuTopMenuActionBar_
?mnuTopMenuActionBar_
no inicializado, ¿verdad? ¿Cómo solucionaría eso?Para actualizar el menú desde Fragment simplemente llame a:
fuente
He usado este código:
Y funcionó como un encanto para mí, puedes encontrar OnPrepareOptionsMenu aquí
fuente
Primero, siga las dos líneas de códigos para actualizar los elementos de la barra de acciones antes de establecer una condición en oncreateOptionMenu (). Por ejemplo:
fuente
Para mayor claridad, pensé que a continuación se puede mostrar un ejemplo directo de apropiación de un recurso que creo que contribuye a la respuesta a esta pregunta con un ejemplo directo rápido.
En este caso, mantiene una referencia de MenuItem al principio y luego cambia su estado (para cambios de estado de icono, por ejemplo) en un momento dado posterior.
fuente
En Kotlin 1.2 simplemente llame a:
y se
onCreateOptionsMenu
volverá a llamar a la función.fuente