2012-05-26 85 views
13

我遇到了一个简单情况下的问题(至少,看起来像这样)。我需要动态创建上下文菜单的子菜单,并为每个项目提供一个无线电框。我做了很多试验。当我打电话给menu.setGroupCheckable(0, true, true)时,其中0默认为菜单本身,它按预期在每个菜单项上右侧显示单选按钮,但我需要这个菜单项作为子菜单。所以,我有以下代码:如何使用Android中的单选按钮创建子菜单?

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); 

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

那么,如何才能做到这一点?

+0

记住,上下文菜单都消失了,有利于操作栏上上下文动作模式。 – CommonsWare

+2

仍适用于与操作栏中的ActionProvider一起使用的SubMenu。 – aap

回答

10

我发现菜单和子菜单组是分开处理的,即在子菜单中形成的组,应通过子菜单寻址,而不是通过顶层菜单寻址。所以,解决的办法是拨打:

sub.setGroupCheckable(1, true, true); 

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

14

将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> 
+1

此外,请确保子项目没有设置其可检查属性。 – Clyde