2012-05-26 117 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