【问题标题】:Android -- Problems with Checkable menu itemsAndroid -- Checkable 菜单项的问题
【发布时间】:2011-04-30 19:25:55
【问题描述】:

我已阅读 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;
    }

问题是当我单击一项时,菜单项消失了。它不必保持可见以检查其他菜单项吗?

有什么想法吗?

问候

【问题讨论】:

  • 你解决过这个问题吗?我也遇到了同样的问题。

标签: android menu checkbox items


【解决方案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);
      }
    }
    

    【讨论】:

      【解决方案3】:

      什么是 currAvailableOptions?我看了你链接到的文章,里面没有任何内容。看来您需要做的就是检查:

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

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

      【讨论】:

      • 这可以缩短为item.setChecked(!item.isChecked()) :-)
      【解决方案4】:

      您可能应该在每个 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 的问题,还是你只是建议以某种方式改进代码?
      • 他在每种情况下都有一个return,所以不需要break
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多