如何以编程方式禁用我的活动中的所有菜单项

hap*_*497 1 android

在android中,我创建这样的菜单项?

public boolean onCreateOptionsMenu(Menu menu) {

        menu.add(0, 0, 0, "Menu1");
        menu.add(0, 1, 0, "Menu2");
        return true;
}
Run Code Online (Sandbox Code Playgroud)

如何设置所有菜单项以编程方式禁用(在我的活动中的代码的另一部分,而不是onCreateOptionsMenu()方法本身)?

谢谢.

Dan*_*Lew 9

您可以使用您设置的groupId一次禁用/启用所有菜单项menu.setGroupEnabled().因此,例如,由于您将项目添加到组0,您将执行以下操作:

menu.setGroupEnabled(0, false);
Run Code Online (Sandbox Code Playgroud)

此外,如果您想动态修改菜单,您应该进入onPrepareOptionsMenu(). onCreateOptionsMenu()每个Activity只调用一次,因此它最适合设置初始菜单结构,但onPrepareOptionsMenu()应该用于稍后在Activity中启用/禁用菜单.


Dav*_*und 6

add返回a MenuItem(您也可以从Menu对象中检索),您可以将其存储到变量中.

MenuItem menu1;

public boolean onCreateOptionsMenu(Menu menu) {
    menu1 = menu.add(0, 0, 0, "Menu1");
}

public void someOtherMethod() {
    if(menu1 != null) {
        // if it's null, options menu hasn't been created, so nevermind
        menu1.setEnabled(false);
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*lle 5

如果不应该使用它们(而不是禁用它们),我宁愿完全隐藏它们.为此,我做:

menu.clear();
Run Code Online (Sandbox Code Playgroud)

并重新创建它:

invalidateOptionsMenu();
Run Code Online (Sandbox Code Playgroud)

这也适用于从片段添加的菜单项.