El submenú de la barra de acciones no funciona después de que se invoca a supportInvalidateOptionsMenu

Tengo una actividad que extiende la ActionBarActivity que está incluida en la revisión de paquete de soporte 18. Tengo un elemento de menú que contiene un submenú y funciona bien cuando carga la aplicación. Sin embargo, si llamo a supportInvalidateOptionsMenu () por alguna razón el submenú no aparece más. El código relacionado sería el xml para el menú

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_search" android:icon="@drawable/ic_search" android:title="@string/menu_search" myapp:actionViewClass="android.support.v7.widget.SearchView" myapp:showAsAction="always|collapseActionView"/> <item android:id="@+id/menu_now_playing" android:icon="@drawable/ic_nowplaying" android:title="@string/menu_nowplaying" myapp:showAsAction="always"/> <item android:id="@+id/menu_station_overflow" android:icon="@drawable/ic_overflow" android:title="@string/more" myapp:showAsAction="always"> <menu> <item android:id="@+id/menu_favorite" android:icon="@drawable/ic_favorite" android:title="@string/favorite"/> </menu> </item> </menu> 

Y luego el código para crear el menú

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity, menu); return super.onCreateOptionsMenu(menu); } 

Debo señalar que este problema se produce en los dispositivos de pan de jengibre, pero no hay problemas en Android 4.x. ¿Alguien tiene alguna idea de lo que podría estar pasando aquí?

Aquí hay un trabajo alrededor (como tuvimos el mismo problema). Cualquier elemento de menú que necesite ser modificado posteriormente, se ponen en variables de instancia, por ejemplo:

 private MenuItem stationMenuItem; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity, menu); stationMenuItem = menu.findItem(R.id.menu_station_overflow); return super.onCreateOptionsMenu(menu); } public void doStuff(boolean menuVisible) { if (stationMenuItem != null) { stationMenuItem.setVisible(menuVisible); } } 

Esto NO es una solución ideal, pero algo que funcionará hasta que esto sea fijo. Cambios en los elementos del menú DEBE suceder en onPrepareOptionsMenu(Menu menu) después de llamar a supportInvalidateOptionsMenu()

No devuelva super.onCreateOptionsMenu(menu); Porque eso siempre volverá falso. Sólo devuelva verdad.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.