Tuve un problema al configurar algunos elementos del menú de fragmentos en el ActionBar
y encontré la manera de resolverlo, pero no entiendo por qué funcionó.Usar onPrepareOptionsMenu en lugar de onCreateOptionsMenu en el fragmento
Quería cambiar la visibilidad en un elemento del menú justo después de inflarlo desde un archivo de menú xml en el método onCreateOptionsMenu
. El código parece funcionar bien, pero no hay efecto visible. Resolví el problema inflando el menú en el método onCreateOptionsMenu
pero cambiando la visibilidad del mismo en el método onPrepareOptionsMenu
.
Lo que quiero saber es por qué cambiar la visibilidad en onCreateOptionsMenu
no funciona.
¿Qué puedo hacer en onPrepareOptionsMenu
que no puedo hacer en onCreateOptionsMenu
?
¿Hay algún patrón a seguir aquí?
Gracias!
Aquí está el código en cuestión, por si acaso:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
No estoy seguro, pero el [Documentación] (http://developer.android.com/reference/android/app/Activity. html # onCreateOptionsMenu (android.view.Menu)) dice: "_ ... Para actualizar el menú cada vez que se muestra, consulte [onPrepareOptionsMenu (Menu)] (http://developer.android.com/reference/android/app/ Activity.html # onPrepareOptionsMenu (android.view.Menu)) ._ " –
¡Gracias por el comentario! Lo que pasa es que no necesito 'actualizarlo cada vez que se muestra' (se muestra todo el tiempo, no hay submenús), solo quiero configurar el menú una sola vez, cuando se crea/infla y eso es todo . Muy bien, puede parecer lo mismo en mi situación, pero el objetivo de mi pregunta es entender por qué funciona así. ¿Por qué tengo que 'reconfigurar' el menú cada vez que se muestra cuando puedo hacerlo solo una vez cuando lo creo? –
Entiendo y acepto que debería ser una opción. Sin embargo, en mi opinión, creo que es la forma en que funciona Android. En algunos casos, puede codificar las propiedades del menú con atributos xml. –