Estoy tratando de cambiar el título de un elemento del menú desde fuera del onOptionsItemSelected(MenuItem item)
método.
Ya hago lo siguiente;
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
sin embargo, me gustaría poder modificar el título de un elemento de menú en particular fuera de este método.
Respuestas:
Como sugirió JxDarkAngel, llamando a esto desde cualquier parte de su Actividad ,
y luego anulando:
Es una opción mucho mejor. Usé la respuesta de https://stackoverflow.com/a/17496503/568197
fuente
onPrepareOptionsMenu()
el marco de Android llama con bastante frecuencia, por ejemplo, al mostrar una Actividad y cada vez que se muestra el menú. Por lo tanto, esto puede no ser muy eficiente si su menú no cambia muy a menudo.invalidateOptionsMenu()
también llamaráonCreateOptionsMenu()
, para que pueda poner la lógica de actualizaciónonCreateOptionsMenu()
.Sugeriría mantener una referencia dentro de la actividad al objeto Menú que recibe en onCreateOptionsMenu y luego usarlo para recuperar el Elemento Menú que requiere el cambio cuando lo necesite. Por ejemplo, podría hacer algo similar a lo siguiente:
Alternativamente, puede anular onPrepareOptionsMenu para actualizar los elementos del menú cada vez que se muestra el menú.
fuente
puede hacer esto crear un objeto global "Menú" y luego asignarlo en onCreateOptionMenu
entonces asigna aquí
Luego, use el objeto de menú asignado para obtener los elementos requeridos
fuente
Cree un método setOptionsTitle () y establezca un campo en su clase. Como:
...
Ahora, cuando se llena el menú, cambie el título a cualquiera que sea su estado:
fuente
Es mejor usar la anulación en el menúPrepareOptionsMenu
Aquí un ejemplo
fuente
Utilizo este código para personalizar mi elemento de navegación inferior
fuente
Declara tu campo de menú.
El siguiente es el método onCreateOptionsMenu ()
Lo siguiente será su actividad de establecimiento de nombre. Ya sea a través de un clic de botón o mediante un código condicional
Esto funcionó para mí.
fuente
Me parece que desea cambiar el contenido del menú dentro de un método local, y este método se llama en cualquier momento, cada vez que se produce un evento o en el hilo de la interfaz de usuario de la actividad.
¿Por qué no tomas la instancia de Menú en la variable global en onPrepareOptionsMenu cuando esto se anula y utilizas en este método tuyo? Asegúrese de que se llame a este método cada vez que se produzca un evento (como hacer clic en el botón), o en el subproceso de la interfaz de usuario de actividad, el controlador o la tarea asíncrona posterior a la ejecución.
Debe conocer de antemano el índice de este elemento del menú que desea cambiar. Después de borrar el menú, debe inflar el menú XML y actualizar el nombre o icono de su elemento.
fuente
Para las personas que necesitan el título establecido estáticamente. Esto se puede hacer en AndroidManifest.xml
fuente
Necesitaba cambiar el ícono de menú para el fragmento. Modifiqué un poco la respuesta de Charles a esta pregunta para el fragmento:
fuente