单击时更改MenuItem可见性

sca*_*and 4 android visibility case menuitem

当我MenuItem选择第一个时,我试图隐藏一个并使另一个可见.

每个的ID是:

pencil: R.id.button_routines_edit
check mark: R.id.button_routines_edit_done
Run Code Online (Sandbox Code Playgroud)

这里有相关代码:

  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;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是:选项菜单在选中时不会重新绘制项目.换句话说,第一个未隐藏,第二个未显示.

adn*_*eal 5

你需要做的就是打电话invalidateOptionsMenu().

invalidateOptionsMenu()仅在API 11+中可用,除非您使用的是ActionBarSherlock.

你有这个问题,因为你MenuItems的表现ActionBar基本上都是.如果将它们放在溢出菜单中,则无需调用invalidateOptionsMenu().