安卓--可选菜单项出现问题

7
我已经阅读了Android开发者页面上的说明,以获取可选菜单项:

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

这是我的 XML 菜单:

<?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个回答

3

可选择的项目仅出现在子菜单或上下文菜单中。

而他们(谷歌)所说的子菜单是:

子菜单:当用户点击包含嵌套菜单的菜单项时,会出现浮动菜单项列表。

由于您的菜单项不是子菜单项,因此无法正常工作。


2

我知道这不是对你问题的直接回答,但请考虑使用以下代码替代你的switch语句,它可能有助于你找到问题所在。

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

0
什么是currAvailableOptions?我看了你提供的链接文章,里面没有提到这个。看起来你只需要检查一下就可以了:
   if (item.isChecked())
      item.setChecked(false);
   else
      item.setChecked(true);

或许你应该再读一遍教程,至少教程是这么说的。希望能对你有所帮助。


4
这可以简化为item.setChecked(!item.isChecked()) :-) - MByD

-1

在每个 case: 后面,你应该加上 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);
}

但是那真的能解决OP的问题吗?还是你只是建议以某种方式改进代码? - user280109
1
他在每种情况下都有一个return,因此不需要break - invertigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接