java - 在运行时更改菜单

标签 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.photomenu, menu);
    else // Photo + delete option
        getMenuInflater().inflate(R.menu.photodeletemenu, menu);

    return super.onCreateOptionsMenu(menu);
}

最佳答案

onCreateOptionsMenu 只被调用一次。可能有一个 hack 可以让你删除一个选项菜单,但是在调用之后修改它的标准方法如下来自 android 文档,请注意它说“必须”

在运行时更改菜单项

创建 Activity 后,仅调用一次 onCreateOptionsMenu() 方法,如上所述。系统会保留并重复使用您在此方法中定义的菜单,直到您的 Activity 被销毁。如果您想在第一次创建选项菜单后随时更改它,您必须覆盖 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);
}

关于java - 在运行时更改菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6791966/

相关文章:

Java:什么对象比较合适?

java - 同步有多贵?

java - SDP消息构造?

android - 在 fragment 中使用 Google Map v2 的推荐方法是什么?

Android - 处理在 Vector 类中分配的位图

java - 当用户从资源类访问资源时,Rest Service 将如何执行?

Java JNA 使用 Keyhook 回调

Android获取时间格式

java - 应用像素级操作很慢

android - Android 动画中的 java.util.ConcurrentModificationException