禁用Android菜单组

Pat*_*ick 6 java android menu

我尝试使用以下代码禁用菜单组,但它不起作用,菜单项仍然启用.你能告诉我有什么问题吗?

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>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 18

感谢user432209的信息,这里是答案:

menu.findItem (R.id.b).getSubMenu ().setGroupVisible (R.id.group_1, false);
Run Code Online (Sandbox Code Playgroud)


use*_*209 6

我不确定你是否可以使用这样的团体,但试试这个(值得一试):

MenuItem item = menu.findItem(R.id.group_1);
item.setVisible(true);
item.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

编辑:您的问题是您的菜单结构以及如何onCreateOptionsMenu使用父/子菜单在里面创建菜单.

您为父菜单而不是子菜单创建菜单,这就是调用setGroupEnabledsetGroupVisible失败的原因.您需要创建一个onCreateOptionsMenu表示子对象的对象,以便传递该对象onPrepareOptionsMenu并使您的代码起作用.