Настройка панели инструментов с помощью setSupportActionBar() при возобновлении фрагмента

В моем приложении у меня есть:

  • ActionBarActivity A
  • Фрагмент1 с панелью инструментов1
  • Фрагмент2 с панелью инструментов2

ActionBarActivity A показывает фрагмент 1 (который использует метод setSupportActionBar() Activity для установки панели инструментов1 в качестве панели действий).

При нажатии на кнопку отображается Фрагмент 2 (с использованием метода add() FragmentTransation), и теперь Fragment2 устанавливает панель инструментов2 в качестве панели действий с помощью setSupportActionBar().

Нажатие на кнопку «Назад» выталкивает задний стек, чтобы снова показать Fragment1. Здесь я хочу снова установить панель инструментов1 в качестве панели действий.

Каков самый простой способ добиться этого? (надеюсь, не пытаясь понять, какой фрагмент показан, и настроить панель инструментов из каждого фрагмента)


person dors    schedule 24.11.2014    source источник


Ответы (1)


Используйте onBackStackChangedListener.

        getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override public void onBackStackChanged() {
            //get the fragment.
            if (fragment instanceof BaseFragment) {
                //set action bar
                setActionBar(((BaseFragment)fragment).getActionBar());
            }

        }
    });
person dannyroa    schedule 24.11.2014
comment
Что такое получить фрагмент? Я хочу что-то общее, чтобы применить ко всем моим фрагментам (не искать каждый по тегу) - person dors; 25.11.2014
comment
Вам нужно получить ссылку на отображаемый в данный момент фрагмент. Используйте findFragmentById. - person dannyroa; 25.11.2014
comment
Как вы можете сделать его универсальным, если каждый фрагмент устанавливает другую панель действий? - person dannyroa; 25.11.2014
comment
И какой идентификатор я ищу? Как я уже сказал, я не хочу проверять один за другим - person dors; 25.11.2014
comment
Имея фрагменты, реализующие интерфейс, который предоставляет панель инструментов для действия - person dors; 25.11.2014
comment
Как вы размещаете фрагмент в макете? Вы назначаете идентификатор фрагменту при его добавлении. Используйте это. - person dannyroa; 25.11.2014
comment
Если у вас есть собственный класс Fragment, вы можете реализовать такой метод, как getActionBar(). Смотрите обновленный код. - person dannyroa; 25.11.2014