我需要在前一个屏幕(Activity)返回时启用MenuItem。
我试过这段代码:
... ((菜单项)findViewById(R.id.menu_how))的setEnabled(真)。 ...
但是启动了空指针异常。
BTW,在xml中menu_how设置为false;并且代码是onActivityResult(int requestCode,int resultCode,Intent data)调用的一部分。
答案 0 :(得分:6)
我在android dev site找到了一些可能有帮助的东西(查找“在运行时更改菜单项”部分)
它表示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);
}
答案 1 :(得分:6)
尝试在onCreateOptionsMenu中使用menu.findItem(R.id.menu_how)
并保存引用以供日后使用。
这应该可以与enabled
一起使用,但是,我发现在XML中将菜单项设置为不可见意味着您无法以编程方式显示/隐藏它。
答案 2 :(得分:1)
你在哪里调用它?(对不起,没仔细阅读)我认为你需要在菜单膨胀后调用它(通常在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;
答案 3 :(得分:0)
在您的活动中保留对菜单的引用:
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);