我希望根据变量隐藏ActionBar中的图标。有一种简单的方法可以做到这一点吗?
我是否需要使用onPrepareOptionsMenu()
,如果是这样的话?
答案 0 :(得分:2)
要隐藏菜单项,您应在菜单充气后使用活动setVisible()
覆盖菜单项中的onPrepareOptionsMenu()
方法。例如:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.example, menu);
if(showItem) {
menu.findItem(R.id.icon).setVisible(true);
} else {
menu.findItem(R.id.icon).setVisible(false);
}
return true;
}
如果您在onCreate()
内声明了自己的变量,那么它将被限制在onCreate()
的范围内,因此无法访问onPrepareOptionsMenu()
。
例如,而不是:
@Override
protected void onCreate(Bundle savedInstanceState) {
boolean showItem = false;
// ...
}
声明如下:
public boolean showItem = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
}
此外,如果您想更改按钮按下的可见性,例如,您需要调用invalidateOptionsMenu()
方法重新加载菜单。
答案 1 :(得分:0)
您需要根据您的变量拨打invalidateOptionsMenu()
。
当您致电invalidateOptionsMenu()
时,系统会调用onPrepareOptionsMenu
,您可以隐藏/显示此选项菜单..
@Override
public boolean onPrepareOptionsMenu(Menu menu){
for(int index = 0 ; index < menu.size() ; index ++){
MenuItem menuItem = menu.getItem(index);
if(menuItem != null) {
// hide the menu items
menuItem.setVisible(false);
}
}
return super.onPrepareOptionsMenu(menu);
}