在运行时更改菜单

时间:2011-07-22 15:04:34

标签: 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);
}

1 个答案:

答案 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);
}