Как создать подменю с переключателями в 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);
Это делает подменю иметь флажок в каждом элементе, а флажки работают исключительно, но я хочу радиобокс, потому что они выглядят более интуитивно для эксклюзивного выбора.
Итак, как это можно сделать?
Ответы
Ответ 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>