Android - Проблемы с проверяемыми пунктами меню - PullRequest
6 голосов
/ 30 апреля 2011

Я прочитал инструкции на странице разработчиков 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 ]

3 голосов
/ 13 декабря 2011

Проверяемые элементы отображаются только в подменю или контекстных меню.

А с подменю они (Google) означают:

Подменю Плавающий список пунктов меню, который появляется, когда пользователь касается элемента меню, содержащего вложенное меню.

Поскольку ваши пункты меню не являются элементами подменю, он не будет работать

2 голосов
/ 01 мая 2011

Я знаю, что это не прямой ответ на ваш вопрос, но, пожалуйста, рассмотрите следующий код вместо вашего переключателя, это может помочь вам найти проблему.

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 голосов
/ 08 февраля 2012

Вы, вероятно, должны добавить break; операторов после каждого case:

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);
}
0 голосов
/ 01 мая 2011

Что такое currAvailableOptions? Я посмотрел на статью, на которую вы ссылались, и там не было ничего об этом. Казалось бы, все, что вам нужно сделать, это проверить:

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

или, по крайней мере, так говорится в руководстве. Возможно, вам следует прочитать его еще раз? Надеюсь, это поможет.

...