我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?
这就是我想做的:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?
这就是我想做的:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
当前回答
使用invalidateOptionsMenu ()
为了调用onprepareoptionmenu(菜单:菜单?)
你应该使用onCreateOptionsMenu()只创建初始菜单状态,而不是在活动生命周期中进行更改… 当一个事件发生并且你想要执行菜单更新时,你必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。
https://developer.android.com/guide/topics/ui/menus
其他回答
我认为更好的方法是为菜单使用成员变量,在onCreateOptionsMenu()中初始化它,然后只使用setVisible(),而不使选项菜单无效。
对于使用Appcompat库的用户: 如果你的Activity子类ActionBarActivity,你可以调用supportInvalidateOptionsMenu()
图示: https://stackoverflow.com/a/19649877/1562524
最初在菜单布局文件中将菜单项可见性设置为false,如下所示:
<?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">
<item
android:visible="false"
android:id="@+id/action_do_something"
android:title="@string/txt_do_something"
app:showAsAction="always|withText"
android:icon="@drawable/ic_done"/>
</menu>
然后,您可以简单地将菜单项的可见性设置为false,在您的oncreateoptionsmmenu()后,膨胀菜单。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(menu,R.menu.menu);
MenuItem item = menu.findItem(R.id.menuItemId);
if (item != null){
item.setVisible(false);
}
}
将一个值设置为一个变量并调用invalidateOptionsMenu();
例如
selectedid=arg2;
invalidateOptionsMenu();
public boolean onPrepareOptionsMenu(Menu menu) {
if(selectedid==1){
menu.findItem(R.id.action_setting).setVisible(false);
menu.findItem(R.id.action_s2).setVisible(false);
menu.findItem(R.id.action_s3).setVisible(false);
}
else{
if(selectedid==2){
menu.findItem(R.id.action_search).setVisible(false);
menu.findItem(R.id.action_s4).setVisible(false);
menu.findItem(R.id.action_s5).setVisible(false);
}
}
return super.onPrepareOptionsMenu(menu);
}
按常规方法创建菜单选项(参见下面的代码),并在类中向菜单添加全局引用
Menu mMenu; // global reference within the class
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_tcktdetails, menu);
mMenu=menu; // assign the menu to the new menu item you just created
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_cancelticket) {
cancelTicket();
return true;
}
return super.onOptionsItemSelected(item);
}
现在您可以通过使用按钮或在函数中运行这段代码来切换菜单
if(mMenu != null) {
mMenu.findItem(R.id.action_cancelticket).setVisible(false);
}