2011-03-22 61 views
4

我嘗試使用以下代碼禁用菜單組,但它不起作用,菜單項仍處於啓用狀態。你能告訴我什麼是錯的嗎?禁用Android菜單組

RES /菜單/ menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/a" android:title="A"></item> 
    <item android:id="@+id/b" android:title="B"> 
    <menu> 
     <item android:id="@+id/c" android:title="C" /> 
     <item android:id="@+id/d" android:title="D" /> 
     <group android:id="@+id/group_1"> 
     <item android:id="@+id/e" android:title="E" /> 
     <item android:id="@+id/f" android:title="F" /> 
     </group> 
    </menu> 
    </item> 
</menu> 

的Java:

public boolean onPrepareOptionsMenu (Menu menu) { 
    menu.setGroupEnabled (R.id.group_1, false); // does not work 
    menu.setGroupVisible (R.id.group_1, false); // does not work either 
    return super.onPrepareOptionsMenu (menu); 
} 

public boolean onCreateOptionsMenu (Menu menu) { 
    getMenuInflater().inflate (R.menu.menu, menu); 
    return true; 
} 

回答

15

由於user432209的信息,這裏是答案:

menu.findItem (R.id.b).getSubMenu().setGroupVisible (R.id.group_1, false); 
+0

這應該被標記爲答案。 – 2012-09-03 18:25:59

5

我不知道是否可以使用一組這樣的,但試試這個(其值得一試):

MenuItem item = menu.findItem(R.id.group_1); 
item.setVisible(true); 
item.setEnabled(false); 

編輯:你的問題是你的菜單結構,以及如何創建菜單項ide onCreateOptionsMenu由於使用父/子菜單。

創建父菜單,不是孩子菜單的菜單,所以這就是爲什麼調用setGroupEnabledsetGroupVisible失敗。您需要在onCreateOptionsMenu中創建一個代表孩子的對象,以便將該對象傳入onPrepareOptionsMenu並使您的代碼正常工作。

+1

不行的,'則findItem(R.id.group_1)'返回null。 – Patrick 2011-03-22 15:36:03

+0

顯示你的'onCreateOptionsMenu'代碼。 – user432209 2011-03-22 16:29:34

+0

我已經添加了它(它沒有什麼特別的)。 – Patrick 2011-03-22 16:47:13