Подтвердить что ты не робот

OnCreateOptionsMenu() вызов супер

Я создаю приложение с OptionsMenu. Я нашел несколько примеров, но каждый использует другое место, где можно вызвать метод super.onCreateOptionMenu() в onCreateOptionsMenu().

Список различных способов:

@Override // without super
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return super.onCreateOptionsMenu(menu);
}

Что я должен использовать?

4b9b3361

Ответ 1

Это зависит от того, что вы хотите сделать. В первом примере вы разместите свое меню и только свое меню. Второй, добавит первое меню суперкласса. Последний добавит ваше меню первым. Но имейте в виду, что в меню также есть поле заказа, которое будет учитываться во время рендеринга.

Скажем, вы расширяете активность, у которой уже есть меню, но вы не хотите, чтобы это меню отображалось, а другое. В этом случае вы будете использовать первый подход.

Другой пример: вы расширяете действие, в котором есть меню, и вы хотите добавить другое меню. В этом случае вы можете использовать второй или последний подход.

Ответ 2

Источник onCreateOptionsMenu() выглядит следующим образом:

public boolean onCreateOptionsMenu(Menu menu) {
    if (mParent != null) {
        return mParent.onCreateOptionsMenu(menu);
    }
    return true;
}

Где mParent - родительская активность текущей Activity. Если ваше действие расширяет android.app.Activity, тогда можно просто вернуть true в конце и не беспокоиться о вызове super, так как реализация по умолчанию попытается показать меню на основе родительской активности, которую вы, вероятно, не хотите.