Отключить группу меню Android - PullRequest
6 голосов
/ 22 марта 2011

Я пытаюсь отключить группу меню с помощью следующего кода, но это не работает, пункты меню по-прежнему включены.Подскажите, пожалуйста, в чем дело?

res / menu / 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;
}

Ответы [ 3 ]

17 голосов
/ 23 марта 2011

Спасибо пользователю user432209, вот ответ:

menu.findItem (R.id.b).getSubMenu ().setGroupVisible (R.id.group_1, false);
6 голосов
/ 22 марта 2011

Я не уверен, что вы можете использовать такую ​​группу, но попробуйте это (это стоит попробовать):

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

Редактировать: Ваша проблема - структура вашего меню и то, как вы создаете меню внутри onCreateOptionsMenu из-за использования родительских / дочерних меню.

Вы создаете меню для родительского меню, а не дочернего меню, поэтому вызов setGroupEnabled и setGroupVisible завершается неудачно. Вам нужно создать в onCreateOptionsMenu объект, представляющий дочерний элемент, чтобы этот объект был передан в onPrepareOptionsMenu и ваш код работал.

0 голосов
/ 15 марта 2018

Вышеупомянутое решение работает хорошо, но оно должно быть написано в onCreateOptionsMenu, вот пример:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Inflate the menu
    inflater.inflate(R.menu.menu, menu);

    // Make the menu item visible and enable it.
    MenuItem item = menu.findItem(R.id.group_1);
    item.setVisible(true);
    item.setEnabled(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...