我有一个活动,它扩展了支持包版本18中包含的ActionBarActivity。我有一个包含子菜单的菜单项,当我加载应用程序时它可以正常工作。但是,如果我因某种原因调用supportInvalidateOptionsMenu(),子菜单不会再弹出。相关代码将是菜单的 然后是创建菜单的代码 我应该注意姜饼设备上会出现此问题,但android 4.x上没有问题。有谁知道这里会发生什么?<?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>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity, menu);
return super.onCreateOptionsMenu(menu);
}
答案 0 :(得分:2)
这是一个解决方法(因为我们遇到了同样的问题)。任何需要稍后修改的菜单项,我们都会放入实例变量,例如:
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);
}
}
这不是一个理想的解决方案,但在修复之前一直有效。菜单项的更改应该在调用onPrepareOptionsMenu(Menu menu)
supportInvalidateOptionsMenu()
中发生
答案 1 :(得分:0)
不要返回super.onCreateOptionsMenu(menu);
因为它总是返回false。只需返回true。