Android 单击时更改菜单项可见性

Android 单击时更改菜单项可见性,android,case,visibility,menuitem,Android,Case,Visibility,Menuitem,我试图隐藏一个菜单项,并在选择第一个菜单项时显示另一个菜单项 每个的ID是: pencil: R.id.button_routines_edit check mark: R.id.button_routines_edit_done 以下是相关代码: private boolean isEditing = false; @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle

我试图隐藏一个
菜单项
,并在选择第一个菜单项时显示另一个菜单项

每个的ID是:

pencil: R.id.button_routines_edit
check mark: R.id.button_routines_edit_done
以下是相关代码:

  private boolean isEditing = false;

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {   
      // Handle item selection
      switch (item.getItemId()) {
      case R.id.button_routines_edit:
            // hide pencil icon, show checkmark
            isEditing = true;
        return true;
      case R.id.button_routines_edit_done:
            // show pencil icon, done editing
            isEditing = false;
        return true;
      default:
          return super.onOptionsItemSelected(item);
      }

  }

  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
      super.onPrepareOptionsMenu(menu);
      // hide pencil when editing and show check mark
      menu.findItem(R.id.button_routines_edit).setVisible(!isEditing);
      menu.findItem(R.id.button_routines_edit_done).setVisible(isEditing);
      return true;
  }
我的问题是:
选项菜单在选中项目时不会重新绘制它们。换句话说,第一个不隐藏,第二个不显示

尝试此操作,它必须隐藏菜单项

public boolean onCreateOptionsMenu(Menu menu){

          menu.getItem(R.id.button_routines_edit).setVisible(!isEditing);
          menu.getItem(R.id.button_routines_edit_done).setVisible(isEditing);
          return true;
      }

您只需调用
invalidateOptions菜单()

仅在API 11+中可用,除非您正在使用


出现此问题的原因是您的
菜单项基本上显示在
操作栏中。如果将它们放在溢出菜单中,则不需要调用
invalidateOptions菜单()

您需要使用
setVisibility(View.INVISIBLE)
设置可见性(View.GONE)要使视图不可访问,它不是视图,而是菜单项,因此该方法不起作用。不确定为什么会否决该方法。这很有效。我还了解到,您必须使用此函数,因为操作栏始终存在,并且使用此函数会强制执行OnPrepareOptions功能表。对于操作栏Sherlock,可以使用
SupportInvalidateOptions功能表()