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);
}
Что я должен использовать?
Ответы
Ответ 1
Это зависит от того, что вы хотите сделать. В первом примере вы разместите свое меню и только свое меню. Второй, добавит первое меню суперкласса. Последний добавит ваше меню первым. Но имейте в виду, что в меню также есть поле заказа, которое будет учитываться во время рендеринга.
Скажем, вы расширяете активность, у которой уже есть меню, но вы не хотите, чтобы это меню отображалось, а другое. В этом случае вы будете использовать первый подход.
Другой пример: вы расширяете действие, в котором есть меню, и вы хотите добавить другое меню. В этом случае вы можете использовать второй или последний подход.
Ответ 2
Источник onCreateOptionsMenu()
выглядит следующим образом:
public boolean onCreateOptionsMenu(Menu menu) {
if (mParent != null) {
return mParent.onCreateOptionsMenu(menu);
}
return true;
}
Где mParent
- родительская активность текущей Activity. Если ваше действие расширяет android.app.Activity
, тогда можно просто вернуть true
в конце и не беспокоиться о вызове super
, так как реализация по умолчанию попытается показать меню на основе родительской активности, которую вы, вероятно, не хотите.