Что делает onPrepareOptionsMenu?

Я хочу сделать Option Menu для Android, я посетил этот сайт. В их скрипте нашел onPrepareOptionsMenu, пытаюсь скомпилировать и запустить компилятором Android 2.3.3 с onPrepareOptionsMenu и без, оба работают, но разницы не увидел.

public boolean onCreateOptionsMenu(Menu menu){
    //code here
}
    
public boolean onOptionsItemSelected(MenuItem item){
    //code here
}
    
public boolean onPrepareOptionsMenu(Menu menu){
    //code here
}

Что на самом деле делает метод onPrepareOptionsMenu? Важен ли этот метод? Могу ли я просто удалить метод?


Добавление

О, я также слышал о Action Bar в Android 3.0, там говорится, что панель действий — это альтернативный способ сделать Option Menu, и он использует onPrepareOptionsMenu. Это правильно?

Спасибо...


person Tutompita    schedule 26.05.2013    source источник
comment
Просто прочитайте документ, пожалуйста. Он создан для этого. Если вы не понимаете конкретный момент того, что он делает, спросите его тогда. developer.android.com/reference/android /приложение/   -  person Alexis C.    schedule 26.05.2013
comment
@ZouZou: Извините, я новичок в Android, я не знаю, был ли документ, пока вы мне не скажете. Спасибо.   -  person Tutompita    schedule 26.05.2013
comment
Он вызывается, когда пользователь нажимает кнопку меню (физическую или на панели действий).   -  person IgorGanapolsky    schedule 02.12.2013


Ответы (3)


Взгляните на API:

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

person Silox    schedule 26.05.2013
comment
Спасибо!! Слова, динамически изменяющие содержание, объясняют все!! - person Tutompita; 26.05.2013
comment
@Tutompita Если этот ответ вас удовлетворил, вы можете отметить его как правильный. - person Silox; 26.05.2013
comment
Было бы лучше, если бы динамическое изменение содержимого можно было объяснить на примере - person Killer; 24.10.2016

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

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

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

person Stochastically    schedule 26.05.2013
comment
Почему вы отключили опцию меню? Не могли бы привести пример случая, когда нам нужно отключить пункт меню? - person Tutompita; 26.05.2013
comment
Я привел пример. Если этот ответ вас удовлетворил, вы можете пометить его как правильный и/или пометить как полезный. - person Stochastically; 26.05.2013
comment
Спасибо за пример, который вы привели, он дал мне другое представление об этом методе. Я видел приложения с тремя вертикальными точками, но они работают на моем Android 2.3.4. Как они это делают? - person Tutompita; 26.05.2013
comment
Я любил голосовать за ваш ответ после того, как у меня будет достаточно репутации. - person Tutompita; 26.05.2013
comment
Я когда-либо использовал только Android 4 и выше, поэтому, возможно, вам следует задать другой вопрос. - person Stochastically; 26.05.2013
comment
О, да, у меня есть еще один вопрос, вы используете onOptionsItemSelected для меню параметров (меню параметров отличается от панели действий, верно?) или используете панель действий для аппаратной кнопки меню в Android 4.0? - person Tutompita; 27.05.2013
comment
Моя минимальная версия Android — 4.0, поэтому я работаю только с ActionBar. Я никогда не работал с каким-либо другим меню опций в Android. Обратите внимание, что вы не можете контролировать, получаете ли вы три вертикальные точки для дополнительного меню или переходите ли дополнительное меню к кнопке аппаратного меню. Если есть аппаратная кнопка меню, то все версии Android, с которыми я знаком, будут автоматически использовать ее для переполнения ActionBar. - person Stochastically; 27.05.2013
comment
О, понятно, я прочитал это тоже. Итак, из того, что я прочитал, ActionBar работает только для API 11 и выше, OptionMenu работает только для API 10 и ниже. Чтобы сделать ActionBar для API 10 и ниже (например, приложения с меню из трех точек, которые я вижу), в нем говорится, что мы можем использовать ActionBarSherlock, а чтобы сделать OptionMenu для API 11 выше, мы должны сделать цель сборки до API 13. - person Tutompita; 28.05.2013

onCreateOptionsMenu вызывается один раз при первом создании активности. Если он возвращает false, меню параметров не отображается, а onPrepareOptionsMenu никогда не вызывается.

Если onCreateOptionsMenu возвращает значение true, onPrepareOptionsMenu также вызывается перед отображением действия, а также каждый раз, когда меню параметров становится недействительным. Используйте onPrepareOptionsMenu, если вам нужно включить/отключить, показать/скрыть или добавить/удалить элементы после его создания.

Если ваше меню не меняется, используйте onCreateOptionsMenu.

person Steven Spungin    schedule 02.09.2017
comment
Привет, спасибо за этот ответ, но у меня есть вопрос: каждый раз, когда я нажимаю на элемент меню в PrepareOptionsMenu, вызывается (я поместил туда журнал), разве он не должен вызываться один раз только при отображении активности? Приложение работает нормально, я просто беспокоюсь об этом. - person Doilio Matsinhe; 05.07.2019
comment
onCreateOptionsMenu вызывается только один раз. Подготовка вызывается несколько раз. Это нормально и беспокойтесь только в том случае, если у вас возникли проблемы с производительностью. - person Steven Spungin; 05.07.2019