Android 如何从ActionBar隐藏图标?

Android 如何从ActionBar隐藏图标?,android,android-actionbar,Android,Android Actionbar,我想根据变量从ActionBar中隐藏一个图标。有没有一个简单的方法可以做到这一点 我是否需要使用onPrepareOptionsMenu(),如果需要,如何使用?要隐藏菜单项,您应该在菜单充气后对活动中的菜单项使用setVisible()方法。例如: @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.in

我想根据变量从ActionBar中隐藏一个图标。有没有一个简单的方法可以做到这一点


我是否需要使用
onPrepareOptionsMenu()
,如果需要,如何使用?

要隐藏菜单项,您应该在菜单充气后对活动中的菜单项使用
setVisible()
方法。例如:

@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()
的范围内,因此在
onPrepareOptions菜单()中无法访问

例如,与此相反:

@Override
protected void onCreate(Bundle savedInstanceState) {
    boolean showItem = false;
    // ...
} 
声明如下:

public boolean showItem = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
}

另外,如果您想更改按钮按下时的可见性,您需要调用
invalidateOptionsMenu()
方法来重新加载菜单。

您需要调用
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);
  }
@覆盖
公共布尔值OnPrepareOptions菜单(菜单){
对于(int index=0;index
好的,这是可行的,但只适用于onCreate()。因此,它不会对变量进行响应changed@Tom调用
Activity.invalidateOptions菜单
,指示应该重新创建选项菜单。您知道Java将变量的范围限制在方法中。我假设您在onCreate中声明了变量,这将变量的范围限制在onCreate方法中,因此您需要在onCreate方法之前在activity类中声明它。我更新了答案以帮助您澄清这一点。另外,正如@adneal所说的,如果你想在按下按钮时更改它,你需要调用invalidateOptionsMenu()来更新它。我的变量不在onCreate中。我需要弄清楚如何使用InvalidateOptions菜单(),那么如何调用
InvalidateOptions菜单()
?变量应该更改时,我是否执行此操作?