Android - 可检查菜单项的问题

时间:2011-04-30 19:25:55

标签: android menu checkbox items

我已经阅读了android开发者页面上的说明,以获取Checkable菜单项:

http://developer.android.com/guide/topics/ui/menus.html

这是我的xmlmenu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="all">
        <item android:id="@+id/regu"
              android:title="@string/Regulatory" />
        <item android:id="@+id/warn"
              android:title="@string/Warning" />
        <item android:id="@+id/temp"
              android:title="@string/Temporary" />
        <item android:id="@+id/bicy"
              android:title="@string/Bicycle" />
    </group>
</menu>

这是我的代码:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
      case R.id.regu:
          if (item.isChecked())
          {
              item.setChecked(false);
              currAvailableOptions++;
          }
          else if(0 != currAvailableOptions)
          {
                  item.setChecked(true);
                  currAvailableOptions--;
          }
          return true;
      case R.id.warn:
          if (item.isChecked())
          {
              item.setChecked(false);
              currAvailableOptions++;
          }
          else if(0 != currAvailableOptions)
          {
                  item.setChecked(true);
                  currAvailableOptions--;
          }
        return true;
      case R.id.temp:
          if (item.isChecked())
          {
              item.setChecked(false);
              currAvailableOptions++;
          }
          else if(0 != currAvailableOptions)
          {
                  item.setChecked(true);
                  currAvailableOptions--;
          }
          return true;
      default:
        return super.onOptionsItemSelected(item);
      }
    }

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.app_menu, menu);
        return true;
    }

问题是当我点击一个项目时,菜单项消失了。为了检查其他菜单项,它不必保持可见状态?

有什么想法吗?

问候

4 个答案:

答案 0 :(得分:3)

  

可检查项目仅出现在子菜单或上下文菜单中。

对于子菜单,他们(谷歌)意味着:

  

子菜单用户显示的菜单项的浮动列表   触摸包含嵌套菜单的菜单项。

由于您的菜单项不是子菜单项,因此无效

答案 1 :(得分:2)

我知道这不是您问题的直接答案,但请考虑以下代码而不是您的开关,它可能会帮助您找到问题。

public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.regu:
  case R.id.warn:
  case R.id.temp:
      if (item.isChecked())
           currAvailableOptions++;
      else if(currAvailableOptions != 0)
           currAvailableOptions--;
      item.setChecked(!item.isChecked());
      return true;
  default:
      return super.onOptionsItemSelected(item);
  }
}

答案 2 :(得分:0)

什么是currAvailableOptions?我查看了你链接的文章,那里没有任何相关信息。您似乎需要做的就是检查:

   if (item.isChecked())
      item.setChecked(false);
   else
      item.setChecked(true);

或者至少是教程所说的。也许你应该再读一次?希望这会有所帮助。

答案 3 :(得分:-1)

您应该在每个案例后添加 break; 语句:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.item1:
        item.setChecked(!item.isChecked());
        break;
    case R.id.item2:
        item.setChecked(!item.isChecked());
        break;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}
相关问题