17

我在一个简单的情况下遇到了问题(至少看起来是这样)。我需要为上下文菜单动态创建一个子菜单,并为每个项目提供一个单选框。我做了很多试验。当我调用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);

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

那么,如何实现呢?

4

2 回答 2

27

将 xml 中的 checkableBehavior 设置为单个。这是一些代码:

<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>
于 2015-05-27T01:52:24.590 回答
17

我发现菜单组和子菜单是分开处理的,即子菜单中形成的组,应该通过子菜单而不是通过顶级菜单来处理。所以解决方案是调用:

sub.setGroupCheckable(1, true, true);

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

于 2012-07-18T13:05:33.620 回答