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

这就是我想做的:

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

当前回答

我认为更好的方法是为菜单使用成员变量,在onCreateOptionsMenu()中初始化它,然后只使用setVisible(),而不使选项菜单无效。

其他回答

这个方法对我很有效:

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;
}

如果您按照上述答案执行了所有操作,但仍然可以看到菜单项,请检查您是否引用了唯一的资源。 例如,在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并检查它是否只存在于一个菜单文件中。如果这个资源已经在任何地方使用并加载在一个活动中,它将尝试隐藏在那里。

你可以调用它:

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

更新:

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

试试这个:

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

我认为更好的方法是为菜单使用成员变量,在onCreateOptionsMenu()中初始化它,然后只使用setVisible(),而不使选项菜单无效。