У меня есть Activity with ActionBar и навигация по вкладкам. Я использую режим разделения, поэтому вкладки находятся вверху и действия находятся в нижней панели. Как я могу динамически изменять нижние действия? Мне нужно это, потому что каждая вкладка имеет разные действия.
Как я могу изменить действия панели действий динамически?
Ответ 1
Так как действия заполняются меню параметров действий, вы можете использовать Activity#invalidateOptionsMenu()
. Это приведет к выгрузке текущего меню и повторному вызову методов onCreateOptionsMenu
/onPrepareOptionsMenu
, чтобы перестроить его.
Если вы используете вкладки панели действий, чтобы лучше изменить конфигурацию фрагментов. Каждый фрагмент управляет своей частью меню. Эти фрагменты должны вызывать setHasOptionsMenu(true)
. Когда фрагменты, имеющие пункты меню опций, добавляются или удаляются, система автоматически отменяет действие меню опций и вызывает все фрагменты onCreateOptionsMenu
/onPrepareOptionsMenu
в дополнение к действию. Таким образом, каждый фрагмент может управлять своими собственными элементами, и вам не нужно беспокоиться о выполнении переключения меню вручную.
Ответ 2
Activity.invalidateOptionsMenu() требует уровня API 11. Существует более простое решение, которое обратно совместимо:
Сначала добавьте MenuItem в меню, но установите видимость на false. При желании установите видимость true, используя MenuItem.setVisible()
Ответ 3
ActionMode.invalidate() сделал трюк. Это вызвало повторный вызов onPrepareActionMode()
.
Activity#invalidateOptionsMenu()
сделал не, чтобы вызвать onPrepareActionMode()
при использовании элементов списка с помощью multi-select.
Ответ 4
Activity.invalidateOptionsMenu()
требуется API-уровень 11. Используйте его версию поддержки supportInvalidateOptionsMenu().
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();