我有三个菜单项"启用,禁用,退出"。我想要做的是,当选择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);
}
答案 0 :(得分:1)
你可以使用invalidateOptionsMenu()来再次调用onCreateOptionsMenu
。
来自文档
声明选项菜单已更改,因此应重新创建。该 onCreateOptionsMenu(Menu)方法将在下次需要时调用 待显示。
在那里,您可以检查您的情况并采取必要的行动
答案 1 :(得分:0)
请参阅onPrepareOptionsMenu的javadoc。这是您在菜单对用户可见之前进行更改的机会。因此,您应该维护一些描述应该可见的成员变量,并使用它来修改菜单项。