2012-05-26 3 views
13

Ich habe ein Problem in einem einfachen Fall (zumindest sieht es so aus). Ich muss dynamisch ein Untermenü für ein Kontextmenü erstellen und jedes Element mit einer Radiobox versehen. Ich habe viele Versuche gemacht. Wenn ich menu.setGroupCheckable(0, true, true) aufrufen, wo 0 standardmäßig das Menü selbst ist, zeigt es Optionsfelder rechts auf jedem Menüelement wie erwartet an, aber ich brauche das für das Untermenü. So habe ich den folgenden Code:Wie erstelle ich ein Untermenü mit Radiobuttons in 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); 

In diesem Fall sehe ich nicht, weder radioboxes, noch Kontrollkästchen im Untermenü. Dann schrieb ich den folgenden Code:

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

Dieses Untermenü macht eine Checkbox in jedem Element zu haben, und die Kontrollkästchen arbeiten ausschließlich, aber ich will radioboxes, weil sie mehr intuitiv für exklusive Auswahl suchen.

Also, wie kann dies erreicht werden?

+0

beachten Sie, dass Kontextmenüs sind Verblassen, für kontextabhängige Aktionsarten auf der Aktionsleiste. – CommonsWare

+2

Gilt immer noch für das SubMenu, das mit einem ActionProvider in der Aktionsleiste verbunden ist. – aap

Antwort

10

Ich habe herausgefunden, dass Gruppen von Menüs und Untermenüs separat verarbeitet werden, dh eine Gruppe, die in einem Untermenü gebildet wird, sollte über das Untermenü angesprochen werden, nicht über das oberste Menü. So ist die Lösung zu nennen:

sub.setGroupCheckable(1, true, true); 

Dieser Code funktioniert wie erwartet, dass Elemente im Untermenü Show Radiobuttons ist anstelle von Kontrollkästchen.

14

Setzen Sie das checkableBehavior in xml auf single. Hier ist ein Code:

<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

Stellen Sie außerdem sicher, dass für die untergeordneten Elemente kein prüfbares Attribut festgelegt ist. – Clyde