如何在android 2.3.3中的运行时更改选项菜单?我有两个xml菜单,需要在运行时切换菜单类型。
我想销毁或更新菜单,当用户按下菜单按钮时,再次调用onCreateOptions菜单,选择相应的xml菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(OPTIONS_TYPE == 0) // Photo option
getMenuInflater().inflate(R.menu.photomenu, menu);
else // Photo + delete option
getMenuInflater().inflate(R.menu.photodeletemenu, menu);
return super.onCreateOptionsMenu(menu);
}
答案 0 :(得分:7)
onCreateOptionsMenu只被调用一次。可能有一个hack可以让你删除一个选项菜单,但是在调用之后修改它的标准方法如下来自android文档,注意它说“必须”
在运行时更改菜单项
创建活动后,onCreateOptionsMenu()方法仅被调用一次,如上所述。系统会保留并重新使用您在此方法中定义的菜单,直到您的活动被销毁。如果您想在首次创建后随时更改选项菜单,必须覆盖onPrepareOptionsMenu()方法。
文档位于Creating Menus
现在说你可以做到这一点,但不确定它是否得到支持。这只是我自己的测试代码,我每次交换菜单,你需要添加自己的逻辑
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
menu.clear();
if (OPTIONS_TYPE == 0) {
OPTIONS_TYPE = 1;
getMenuInflater().inflate(R.menu.secondmenu, menu);
}
else { // Photo + delete option {
OPTIONS_TYPE = 0;
getMenuInflater().inflate(R.menu.firstmenu, menu);
}
return super.onPrepareOptionsMenu(menu);
}