Использование `onPrepareOptionsMenu ()` на Android 3.0+ - PullRequest
21 голосов
/ 21 мая 2011

Мне любопытно, как (если вообще) onPrepareOptionsMenu(Menu) (и, соответственно, onPreparePanel(int, View, Menu)) используется на Android 3.0+ при нацеливании на API 11 или выше.

Я думаю следующее:

ActionBar Activity получает свое содержимое от onCreateOptionsMenu(Menu), где вы можете либо наполнить ресурс меню XML, либо добавить элементы напрямую, либо комбинацию обоих.Любые фрагменты действия также получат этот вызов и могут сделать то же самое.

Чтобы обновить элементы на панели действий, вы можете либо удержать экземпляр Menu, либо вызвать invalidateOptionsMenu(), который затем вызовет onCreateOptionsMenu(Menu) снова.

Таким образом, onPrepareOptionsMenu(Menu) тогда еще только для поддержки унаследованных приложений, которые не нацелены на API 11 или новее?

Вызывает ли getActionBar().hide() и getActionBar().show() вызов к onPrepareOptionsMenu(Menu), возможно?

Не вызывает ли это добавление или удаление фрагмента?

Ответы [ 2 ]

10 голосов
/ 25 мая 2011

Из моего обширного тестирования, как ни странно, он работает точно так же, как в версиях платформы до 3.0, и вызывается только при открытом меню переполнения.Обратный вызов не сработал ни для одного из событий, перечисленных в исходном вопросе.

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

4 голосов
/ 12 августа 2011

Так как у меня недавно были похожие вопросы, и я наткнулся на этот вопрос, я хотел бы добавить для более поздних читателей: Да, onPrepareOptionsMenu по-прежнему работает. Однако вы должны просто вызвать стандартную реализацию для устройств Honeycomb (то есть, если (android.os.Build.VERSION.SDK_INT> = 11) вернуть super.onPrepareOptionsMenu (menu);) и использовать invalidateOptionsMenu () (через отражение, если необходимо). и onCreateOptionsMenu () вместо этого, особенно при использовании showAsAction. В противном случае, меню не будет обновлено, пока не будет открыто. Например, если вы добавляете некоторые записи, когда элемент выбран, элементы будут волшебным образом отображаться на панели действий при открытии меню, а не при выборе элемента. То же самое касается отмены выбора и скрытия пунктов меню.

...