Java 在运行时更改菜单
在android 2.3.3中,如何在运行时更改选项菜单?我有两个xml菜单,需要在运行时切换菜单类型 我想销毁或更新菜单,当用户按下菜单按钮时,再次调用onCreateOptions菜单,选择适当的xml菜单Java 在运行时更改菜单,java,android,Java,Android,在android 2.3.3中,如何在运行时更改选项菜单?我有两个xml菜单,需要在运行时切换菜单类型 我想销毁或更新菜单,当用户按下菜单按钮时,再次调用onCreateOptions菜单,选择适当的xml菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { if(OPTIONS_TYPE == 0) // Photo option getMenuInflater().inflate(R.menu.ph
@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);
}
OnCreateOptions菜单只调用一次。可能有一个黑客可以让你删除一个选项菜单,但是在那次调用之后修改它的标准方法如下,请注意它说“必须” 在运行时更改菜单项 创建活动后,onCreateOptionsMenu()方法只调用一次,如上所述。系统保留并重新使用您在此方法中定义的菜单,直到您的活动被销毁。如果要在首次创建选项菜单后随时更改它,必须重写onPrepareOptions菜单()方法。 文件载于 现在说你可以这样做,只是不确定它是否被支持。这只是我自己的测试代码,每次交换菜单时,您都需要添加自己的逻辑
@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);
}
我看不出你的代码中有问题…应该可以…也许你的xml文件中有问题?检查你的两个xml文件,也许有相同的?您认为您的代码不起作用……但OnCreateOptions菜单只被调用一次。i、 e当用户首先按下选项按钮时,xml中没有错误。。如果我使用“后退”按钮来回切换,一切都正常,但我希望在不切换活动的情况下更改菜单是的,我读过这篇。。但是在OnPrepareOptions菜单中我该怎么做呢?我的意思是我不能使用InvalidateOptions菜单(),因为这只适用于android 3.0及更高版本;(这个问题已经解决了..我通过重写onPrepareOptions菜单(),调用menu.clear(),然后将代码粘贴到我的onCreateOptions菜单中来解决了这个问题:)是的,我添加了第二部分,但你比我强:-)为了在运行时修改android版本低于Honeycom的菜单内容,请调用SupportInvalidateOptions菜单()来自夏洛克的活动。