Java 在运行时更改菜单

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

在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);
}

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菜单()来自夏洛克的活动。