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

这就是我想做的:

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

当前回答

你可以调用它:

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

更新:

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

其他回答

这个方法对我很有效:

private  Menu thismenu;

if (condition)
{
   if(thismenu != null)
   {
       thismenu.findItem(R.id.menu_save).setVisible(true);
       Toast.makeText(ProfileActivity.this, 
    ""+thismenu.findItem(R.id.menu_save).getTitle(),
                Toast.LENGTH_SHORT).show();
   }else
   {
       thismenu.findItem(R.id.menu_save).setVisible(false);
   }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.profile_menu, menu);
   thismenu = menu;

   return true;
}

试试这个:

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

使用invalidateOptionsMenu ()

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

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

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

找到了这个问题的附录:

如果你想要改变菜单项的可见性,你只需要在你的活动中设置一个成员变量来记住你想要隐藏菜单并调用invalidateOptionsMenu(),并在你重写的onCreateOptionsMenu(…)方法中隐藏这些项。

//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == HIDE_MENU)
    {
        for (int i = 0; i < menu.size(); i++)
            menu.getItem(i).setVisible(false);
    }
}

在我的例子中,我隐藏了所有项目。

这在《Activity》和《Fragment》中都很奏效

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (menu.findItem(R.id.action_messages) != null)
        menu.findItem(R.id.action_messages).setVisible(false);
}