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

这就是我想做的:

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

当前回答

通过设置菜单中所有项目的可见性,应用程序栏菜单或溢出菜单将自动隐藏

例子

private Menu menu_change_language;

...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    menu_change_language.findItem(R.id.menu_change_language)
           .setVisible(true);

    return super.onCreateOptionsMenu(menu);
}

在去其他片段之前使用下面的代码:

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

其他回答

你可以调用它:

MenuItem item = menu.findItem(R.id.my_item);
item.setVisible(false);

更新:

确保您的代码不为item返回null,否则可能导致应用程序崩溃。

通过设置菜单中所有项目的可见性,应用程序栏菜单或溢出菜单将自动隐藏

例子

private Menu menu_change_language;

...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    menu_change_language.findItem(R.id.menu_change_language)
           .setVisible(true);

    return super.onCreateOptionsMenu(menu);
}

在去其他片段之前使用下面的代码:

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

使用invalidateOptionsMenu ()

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

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

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

对于使用Appcompat库的用户: 如果你的Activity子类ActionBarActivity,你可以调用supportInvalidateOptionsMenu()

图示: https://stackoverflow.com/a/19649877/1562524

我在寻找一个更有背景的答案。现在我已经弄清楚了,我将添加这个答案。

在菜单xml中默认隐藏按钮

默认情况下,共享按钮将被隐藏,由android:visible="false"设置。

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- hide share button by default -->
    <item
        android:id="@+id/menu_action_share"
        android:icon="@drawable/ic_share_white_24dp"
        android:visible="false"     
        android:title="Share"
        app:showAsAction="always"/>

    <item
        android:id="@+id/menu_action_settings"
        android:icon="@drawable/ic_settings_white_24dp"
        android:title="Setting"
        app:showAsAction="ifRoom"/>

</menu>

代码中显示按钮

但是可以根据某些条件选择显示共享按钮。

MainActivity.java

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    MenuItem shareItem = menu.findItem(R.id.menu_action_share);

    // show the button when some condition is true
    if (someCondition) {        
        shareItem.setVisible(true);
    }

    return true;
}

另请参阅

设置应用程序栏(Android文档帮助设置应用程序/操作栏)