Recibí sugerencias muy útiles para mis últimas preguntas, espero que no sea diferente esta vez :) Primero, déjame explicarte la situación. Tengo una actividad con 2 fragmentos. Para cada fragmento tengo un diseño de menú xml, el primero tiene cuatro entradas de menú, el segundo tiene solo uno. Ahora, al principio, se carga el fragmento con las cuatro entradas del menú. En su método onCreate puseMenú en Fragmentos que no muestran
this.setHasOptionsMenu(true);
el método onCreateOptionsMenu
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fragshow, menu);
}
el archivo XML es el siguiente:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:icon="@drawable/ic_action_search"
android:title="Refresh"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_clearall"
android:icon="@drawable/ic_action_search"
android:title="Clear"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_addcontent"
android:icon="@drawable/ic_action_search"
android:title="Add Content"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_newlist"
android:icon="@drawable/ic_action_search"
android:title="New List"
android:visible="true"
android:showAsAction="ifRoom|withText" />
</menu>
Esto funciona bien. Todos los elementos del menú están allí, puedo hacer clic en ellos y responder. Ahora cuando hago clic en el menú "Agregar contenido", el otro fragmento se carga. Allí me puse así
this.setHasOptionsMenu(true);
el método onCreateOptionsMenu
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
Log.i("FragCreateList","onCreateOptionsMenu called");
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fragcreatelist, menu);
}
el archivo XML
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_editdone"
android:icon="@drawable/ic_action_search"
android:title="Edit Done"
android:visible="true"
android:showAsAction="ifRoom|withText" />
</menu>
Pero en el nuevo fragmento no puedo ver los elementos de menú. Ni en la barra de acciones, ni cuando presiono el botón de menú de hardware. En el fragmento anterior, dos elementos del menú estaban en la barra de acciones, los otros dos aparecían cuando se presionó el botón de hardware. Pero aquí no se muestra nada. Recibo el mensaje de logcat de que se llamó al método onCreateOptionsMenu, pero no ocurre nada. (Incluso recibo una llamada a mi método (vacío) onPrepareOptionsMenu, que debería llamarse justo antes de que se muestre el menú, todavía nada) ¿Alguna pista de lo que podría estar mal? Llamar a invalidateOptionsMenu no hace nada. Además, no sé con certeza a cuál llamar, ya que hay un getActivity(). InvalidateOptionsMenu y un getFragmentManager(). InvalidateOptionsMenu ... Gracias de antemano.
Editar:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
De las respuestas, parece que esto puede ser causado por muchas cosas. Tenía este problema porque yo estaba usando un FragmentActivity en lugar de un AppCompatActivity, y funcionó tan pronto como he cambiado – TallChuck