如何动态更新MenuItem中的复选框?

时间:2015-11-23 03:56:59

标签: java android checkbox

这是我菜单的布局。

注意项目:

<?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;
    }

请注意该功能是如何工作的,因为屏幕会发生变化,但菜单本身并未“检查”或“未选中”。

enter image description here

enter image description here

2 个答案:

答案 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;
}