Подтвердить что ты не робот

Как создать подменю с переключателями в Android?

У меня проблема в простом случае (по крайней мере, это выглядит так). Мне нужно создать подменю для контекстного меню динамически и предоставить каждому элементу радиобокс. Я провел много испытаний. Когда я вызываю menu.setGroupCheckable(0, true, true), где 0 по умолчанию является самим меню, он отображает переключатели справа на каждом пункте меню, как и ожидалось, но мне нужно это для подменю. Поэтому у меня есть следующий код:

SubMenu sub = menu.addSubMenu(R.string.name);
int count = 1000;
for(String e : someList)
{
  MenuItem item = sub.add(1, count, count, e);
  count++;
}
menu.setGroupCheckable(1, true, true);

В этом случае я не вижу ни радиобоксы, ни флажки в подменю. Затем я написал следующий код:

SubMenu sub = menu.addSubMenu(R.string.name);
int count = 1000;
for(String e : someList)
{
  MenuItem item = sub.add(1, count, count, e);
  item.setCheckable(true);
  count++;
}
menu.setGroupCheckable(1, true, true);

Это делает подменю иметь флажок в каждом элементе, а флажки работают исключительно, но я хочу радиобокс, потому что они выглядят более интуитивно для эксклюзивного выбора.

Итак, как это можно сделать?

4b9b3361

Ответ 1

Я узнал, что группы меню и подменю обрабатываются отдельно, то есть группа, сформированная в подменю, должны быть адресованы через подменю, а не через меню верхнего уровня. Поэтому решение должно вызвать:

sub.setGroupCheckable(1, true, true);

Этот код работает так, как ожидалось, то есть элементы в подменю показывают радиокнопки вместо флажков.

Ответ 2

Установите checkableBehavior в xml для одиночного. Вот какой код:

<menu>
      <group android:id="@+id/group"
             android:checkableBehavior="single">
             <item android:id="@+id/menu_sort_by_name"
                   android:title="@string/action_sort_by_name"/>
             <item android:id="@+id/menu_sort_by_last_edit"
                   android:title="@string/action_sort_by_last_edit"/>
      </group>
</menu>