如何更改onOptionsItemSelected(..)中菜单项的可见性

时间:2016-02-11 09:28:35

标签: android menuitem android-optionsmenu

我有三个菜单项"启用,禁用,退出"。我想要做的是,当选择R.id.menu_enable_bt时,我想使用

禁用它
menu.findItem(R.id.menu_enable_bt).setVisible(false);

但我不能打电话

menu.findItem(R.id.menu_enable_bt).setVisible(false);

来自onOptionsItemSelected(..)方法。

如何更改onOptionsItemSelected(..)

中菜单项的可见性

CODE

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    Log.w(TAG, SubTag.msg("onCreateOptionsMenu"));

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    if (this.mBTAdapter.isEnabled()) {
        menu.findItem(R.id.menu_enable_bt).setVisible(false);
        menu.findItem(R.id.menu_disable_bt).setVisible(true);
    } else {
        menu.findItem(R.id.menu_enable_bt).setVisible(true);
        menu.findItem(R.id.menu_disable_bt).setVisible(false);
    }

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    Log.w(TAG, SubTag.msg("onOptionsItemSelected"));

    switch (item.getItemId()) {
        case R.id.menu_enable_bt:
            Log.d(TAG, SubTag.bullet("onOptionsItemSelected", "menu_enable_bt"));

            //menu.findItem(R.id.menu_enable_bt).setVisible(false);  **how to do this**
            this.mATEnableBT = new ATEnableBT();
            this.mATEnableBT.execute();
            break;

        case R.id.menu_disable_bt:
            Log.d(TAG, SubTag.bullet("onOptionsItemSelected", "menu_disable_bt"));

            break;

        case R.id.menu_exit:
            Log.d(TAG,SubTag.bullet("onOptionsItemSelected", "menu_exit"));

            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}

2 个答案:

答案 0 :(得分:1)

你可以使用invalidateOptionsMenu()来再次调用onCreateOptionsMenu

来自文档

  

声明选项菜单已更改,因此应重新创建。该   onCreateOptionsMenu(Menu)方法将在下次需要时调用   待显示。

在那里,您可以检查您的情况并采取必要的行动

答案 1 :(得分:0)

请参阅onPrepareOptionsMenu的javadoc。这是您在菜单对用户可见之前进行更改的机会。因此,您应该维护一些描述应该可见的成员变量,并使用它来修改菜单项。