如何在Android中创建带单选按钮的子菜单?

Sta*_*tan 14 android contextmenu

我在一个简单的情况下有一个问题(至少,它看起来像这样).我需要动态创建一个上下文菜单的子菜单,并为每个项目提供一个radiobox.我做了很多试验.当我打电话时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);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我既没有看到放射线框,也没有看到子菜单中的复选框.然后我写了下面的代码:

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);
Run Code Online (Sandbox Code Playgroud)

这使得子菜单在每个项目中都有一个复选框,并且复选框专门工作,但我想要放射线框,因为它们看起来更直观,可以进行独占选择.

那么,如何实现呢?

Mar*_*fer 22

将xml中的checkableBehavior设置为single.这是一些代码:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 此外,请确保子项没有设置其可检查属性. (5认同)

Sta*_*tan 12

我发现菜单和子菜单组是分开处理的,即在子菜单中形成的组,应通过子菜单进行处理,而不是通过顶级菜单进行处理.因此解决方案是致电:

sub.setGroupCheckable(1, true, true);
Run Code Online (Sandbox Code Playgroud)

此代码按预期工作,即子菜单中的项目显示单选按钮而不是复选框.