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

这就是我想做的:

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

当前回答

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

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

其他回答

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

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

你可以使用toolbar.getMenu().clear();一次隐藏所有菜单项

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

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

获取一个指向这样的菜单项,调用setVisible来调整它的可见性,然后在你的活动上调用invalidateOptionsMenu(),这样动作栏菜单就会相应调整。

更新:菜单项不是常规视图,它是布局的一部分。它很特别,完全不同。你的代码为item返回null,这导致了崩溃。你需要做的是:

MenuItem item = menu.findItem(R.id.addAction);

下面是你应该调用的顺序: 首先调用invalidateOptionsMenu(),然后在onCreateOptionsMenu(Menu)内部获得对MenuItem的引用(通过调用Menu . finditem())并在其上调用setVisible()

使用invalidateOptionsMenu ()

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

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

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