这是我菜单的布局。
注意项目:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_best_stores"
android:title="@string/showStores"
android:onClick="showHideStores"
android:enabled="true"
android:checkable="true"
app:showAsAction="never"
/>
</menu>
这是onAction函数。
public void showHideStores(MenuItem m) {
m.setChecked(!m.isChecked());
SHOWING_STORES = !SHOWING_STORES;
showStoresProcess(SHOWING_STORES);
refreshData();
invalidateOptionsMenu();
}
每当我运行我的程序时,该函数都会起作用,因为应该发生的事情发生了。除了,对于ItemMenu本身发生变化的部分......它没有做任何事情,复选框保持未选中状态......我也试过setTitle,也没有改变任何东西。
因此,第1行没有产生任何变化。
发生了什么事?
这是我给菜单充气的代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_list_actions, menu);
super.onCreateOptionsMenu(menu);
this.menu = menu;
refreshData();
return true;
}
请注意该功能是如何工作的,因为屏幕会发生变化,但菜单本身并未“检查”或“未选中”。
答案 0 :(得分:0)
移除您对invalidateOptionsMenu()
的来电。拨打invalidateOptionsMenu()
会触发回拨给onCreateOptionsMenu()
的电话,这会打开一个新菜单,创建一个新的未经检查的MenuItem
,基本上就是您不想要的踌躇
答案 1 :(得分:0)
问题解释如下:
invalidateOptionsMenu()
时,它会重置为默认菜单。所以什么也没发生。解决方案:覆盖onPrepareOptionsMenu
()
@override
public bool onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
MenuItem m = memenu.findItem(R.id.YourItemId);
m.setChecked(!m.isChecked());//something like this
return true;
}