Использование `onPrepareOptionsMenu()` на Android 3.0+
Мне любопытно, как (если вообще) onPrepareOptionsMenu(Menu)
(и по расширению, onPreparePanel(int, View, Menu)
) используется на Android 3.0+ при настройке API 11 или выше.
Мое мышление выглядит следующим образом:
An Activity
ActionBar
получает свое содержимое от onCreateOptionsMenu(Menu)
, где вы можете раздувать ресурс меню XML, добавлять элементы напрямую или какую-то их комбинацию. Любые фрагменты активности также получат этот вызов и имеют возможность сделать то же самое.
Чтобы обновить элементы в ActionBar, вы можете либо удержать экземпляр Menu
, либо вызвать invalidateOptionsMenu()
, который затем завершится снова вызывая onCreateOptionsMenu(Menu)
.
Таким образом, существует onPrepareOptionsMenu(Menu)
, а затем только вокруг для поддержки устаревших приложений, которые не нацелены на API 11 или новее?
Вызывает ли вызов getActionBar().hide()
и getActionBar().show()
вызов onPrepareOptionsMenu(Menu)
?
Может ли это добавить или удалить фрагмент?
Ответы
Ответ 1
Из моего обширного тестирования это странно кажется, что оно работает точно так же, как и в версиях версии до 3.0, только при вызове при открытии меню переполнения. Обратный вызов не запускался ни в одном из событий, перечисленных в исходном вопросе.
Возможно, очевидный, но заслуживающий внимания факт: в этом обратном вызове доступно все меню, поэтому возможно манипулирование элементами, видимыми на панели действий, в меню переполнения и/или скрытом.
Ответ 2
Sice У меня недавно были схожие вопросы и напутал этот, я хотел бы добавить для более поздних читателей:
Да, onPrepareOptionsMenu все еще работает.
Однако вы должны просто вызвать стандартную реализацию для сотовых устройств (т.е. If (android.os.Build.VERSION.SDK_INT >= 11) вернуть super.onPrepareOptionsMenu(меню);) и использовать invalidateOptionsMenu() (при необходимости, при отражении) и onCreateOptionsMenu() вместо, esp. при использовании showAsAction. В противном случае меню не будет обновляться до его открытия. Например, если вы добавляете некоторые записи, когда элемент выбран, элементы будут волшебным образом отображаться на панели действий при открытии меню, а не при выборе элемента. То же самое относится к отмене выбора и скрытию пунктов меню.