Как мне активировать только onPrepareOptionsMenu, а не onCreateOptionsMenu? - PullRequest
0 голосов
/ 07 августа 2020

Согласно документации Android меню и аналогичный вопрос , onPrepareOptionsMenu следует использовать для динамического обновления меню. Для Android 3.0 и выше в документации говорится:

Когда происходит событие, и вы хотите выполнить обновление меню, вы должны позвонить invalidateOptionsMenu(), чтобы запросить системный вызов onPrepareOptionsMenu()

Однако при вызове invalidateOptionsMenu() система вызывает одновременно , onCreateOptionsMenu() и onPrepareOptionsMenu(). Возобновление действия также вызывает оба метода (если оно было остановлено в фоновом режиме) или ни одного.

Для меня это звучит так, как будто различие между двумя методами устарело. Есть ли ситуация, при которой Android вызывает только onPrepareOptionsMenu(), но не onCreateOptionsMenu()? Кроме того, есть ли способ вручную запросить, чтобы Android вызывал только onPrepareOptionsMenu(), как это подразумевается в документации (цитируется ниже)?

[onCreateOptionsMenu() ] вызывается только один раз, при первом отображении меню параметров. Чтобы обновлять меню каждый раз, когда оно отображается, см. OnPrepareOptionsMenu (Меню).

Большое спасибо!

1 Ответ

0 голосов
/ 07 августа 2020

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

Но если вы вносите много изменений в меню, тогда лучше использовать меню с определенным фрагментом c - они живут только до тех пор, пока их фрагмент - меню

Итак, чтобы ответить на ваш конкретный c вопрос - вы не можете НЕ запускать onCreateOptionsMenu. Вы можете переопределить его, чтобы ничего не делать, но тогда меню не будет раздуваться

EDIT - похоже, я тоже неправильно понял документацию. Ключевой бит для onPrepareOptionsMenu :

Это вызывается прямо перед отображением меню каждый раз, когда оно отображается.

Что на практике означает, что каждый раз при нажатии на меню будет вызываться onPrepareOptionsMenu, без вызова onCreateOptionsMenu

...