单击时更改MenuItem可见性

时间:2012-12-24 07:08:15

标签: android case visibility menuitem

我试图隐藏一个MenuItem并在选择第一个时显示另一个{。

每个人的身份证号码是:

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;
  }

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

2 个答案:

答案 0 :(得分:5)

您需要做的就是致电invalidateOptionsMenu()

invalidateOptionsMenu()仅适用于API 11+,除非您使用的是ActionBarSherlock

您遇到此问题是因为MenuItems基本显示在ActionBar中。如果将它们放在溢出菜单中,则无需拨打invalidateOptionsMenu()

答案 1 :(得分:-1)

试试这个,它必须隐藏菜单项

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;
      }