我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?

这就是我想做的:

MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();

当前回答

对我没用。我必须显式地使用onprepareoptionmenu来设置一个项目不可见。

所以使用onCreateOptionsMenu创建菜单和onPrepareOptionsMenu改变可见性等。

其他回答

使用invalidateOptionsMenu ()

为了调用onprepareoptionmenu(菜单:菜单?)

你应该使用onCreateOptionsMenu()只创建初始菜单状态,而不是在活动生命周期中进行更改… 当一个事件发生并且你想要执行菜单更新时,你必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。

https://developer.android.com/guide/topics/ui/menus

这对我来说很管用;我希望它能帮助你:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.my_menu_setting, menu);

    for (int i = 0; i < menu.size(); i++){
        if(menu.getItem(i).getItemId() == R.id.this_item_i_want_to_hide){
            menu.getItem(i).setVisible(false);
        }
    }

    return true;
}

对我没用。我必须显式地使用onprepareoptionmenu来设置一个项目不可见。

所以使用onCreateOptionsMenu创建菜单和onPrepareOptionsMenu改变可见性等。

是的。

您可以设置标志/条件。 当您想隐藏选项时,调用invalidateOptionsMenu()。这会调用onCreateOptionsMenu()。 在onCreateOptionsMenu()中,检查标志/条件并显示或 隐藏方法如下:

MenuItem item = menu.findItem(R.id.menu_Done); If (flag/condition)) { item.setVisible(假); } else {}

如果您按照上述答案执行了所有操作,但仍然可以看到菜单项,请检查您是否引用了唯一的资源。 例如,在onCreateOptionsMenu或onPrepareOptionsMenu

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuOpen = menu.findItem(R.id.menu_open);
    menuOpen.setVisible(false);
}

Ctrl +单击R.id。Menu_open并检查它是否只存在于一个菜单文件中。如果这个资源已经在任何地方使用并加载在一个活动中,它将尝试隐藏在那里。