2011-03-22 77 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