Как я могу изменить действия панели действий динамически?

У меня есть 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();