当之前的屏幕(Activity)返回时,我需要启用一个菜单项。
我尝试了这段代码:
... ((MenuItem)findViewById(R.id.menu_how)).setEnabled(true); ...
但是会抛出空指针异常。
顺便说一下,menu_how 在 xml 中被设置为 false;而且该代码是 onActivityResult(int requestCode, int resultCode, Intent data) 调用的一部分。
onCreateOptionsMenu()
方法仅在创建活动的菜单时触发,而且只有在此活动开始时才会发生。因此,如果您想在创建菜单/活动后更改菜单项,则需要覆盖onPrepareOptionsMenu()
方法。详细信息请搜索链接。boolean var
来表示每个menuItem
是否应启用。这是我的代码:/*************************************Game Menu**************************************/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId())
{
case R.id.gm_new_game:
//newGame();
return true;
case R.id.gm_stand_up:
//some code when "gm_stand_up" button clicked..
return true;
case R.id.gm_forfeit:
//some code when "gm_forfeit" button clicked..
return true;
case R.id.gm_surrender:
//some code when "gm_surrender" button clicked..
return true;
case R.id.gm_exit_table:
exitTableCommand();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
menu.findItem(R.id.gm_forfeit).setEnabled(forfeitMenuButtonIsEnabled);
menu.findItem(R.id.gm_surrender).setEnabled(surrenderMenuButtonIsEnabled);
menu.findItem(R.id.gm_new_game).setEnabled(newGameMenuButtonIsEnabled);
menu.findItem(R.id.gm_stand_up).setEnabled(standUpMenuButtonIsEnabled);
return super.onPrepareOptionsMenu(menu);
}
menu.findItem(R.id.menu_how)
,并保存一个引用以供将来使用。enabled
正常工作,但是我发现在XML中将菜单项设置为不可见意味着您无法以编程方式显示/隐藏它。你在哪里调用这个函数?(抱歉,我没有认真阅读)我认为你需要在菜单被填充后调用它(通常在OnCreateOptionsMenu中)。为此,您可以在返回其他Activity时将变量设置为true,然后在inflater.inflate调用后的OnCreateOptionsMenu中执行((MenuItem)findViewById(R.id.menu_how)).setEnabled(mMyBooleanField)
。
编辑:要在代码中实现这一点,可能会看起来像这样:
在类的顶部(与所有其他类成员一起):
Boolean mEnableMenuItem = false;
在OnCreateOptionsMenu中:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_main, menu);
((MenuItem)findViewById(R.id.menu_how)).setEnabled(mEnableMenuItem );
在OnActivityResult中:
mEnableMenuItem = true;
private Menu mMenu;
然后:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_note, menu);
mMenu = menu;
return true;
}
现在,要在您的活动中的任何位置访问菜单项,请使用类似于以下代码的代码:
mMenu.findItem(R.id.menu_how).setVisible(false);
或者
mMenu.findItem(R.id.menu_how).setEnabled(true);