Для Activities
понятно - метод вызывается прямо перед показом меню. Но как насчет ActionBar
, когда он показывается всегда? Как вызвать его для динамического обновления menuItems
?
Когда и как часто вызывается метод onPrepareOptionsMenu() для панели действий?
Ответы (2)
Используйте invalidateOptionsMenu() для запуска метода onPrepareOptionMenu(), как это предлагается в документе.
On Android 3.0 and higher, you must call invalidateOptionsMenu() when you want to update the menu, because the menu is always open. The system will then call onPrepareOptionsMenu() so you can update the menu items.
Обратите внимание, что если ваша минимальная версия sdk меньше, чем Honeycomb (он же Android 3.0, он же API-уровень 11), и вы используете ActionBarActivity, вы можете вызвать supportInvalidateOptionsMenu(), которая является версией библиотеки поддержки invalidateOptionsMenu().
Если ваше меню изменяется на основе входящего намерения в onCreate(), вы можете просто выполнять обновления в onPrepareOptionMenu(), если вы динамически меняете меню позже в жизненном цикле действий, вам придется вызывать invalideOptionsMenu или supportInvalidateOptionsMenu в зависимости от ваша минимальная и целевая версии SDK.