Слушатель транзакций фрагмента Android

Мне нужно слушать, когда выполняется транзакция фрагмента, например, когда я заменяю фрагмент другим, без вызова addToBackStack(). Класс FragmentManager предоставляет обратный вызов addOnBackStackChangedListener, но когда я выполняю замену фрагмента без вызова addToBackStack, он не выполняется.

Изменить: операция прослушивания выполняется в классе, который имеет доступ только к экземпляру действия и его диспетчеру фрагментов.


person Victor Manuel Pineda Murcia    schedule 11.10.2016    source источник
comment
для каких целей вам это нужно?   -  person Hank Moody    schedule 11.10.2016
comment
Для библиотеки, которая выполняет некоторые действия при уничтожении фрагмента.   -  person Victor Manuel Pineda Murcia    schedule 11.10.2016


Ответы (2)


Вы можете использовать базовый класс для всех ваших фрагментов. Затем вы можете переопределить метод onDetach(). Например

public class BaseFragment extends Fragment {

@Override
public void onDetach() {
   // run code that needed by your library. e.g.
    if (getActivity() != null && getActivity() instanceof MainActivity) {
    ((MainActivity)getActivity()).someMethodToDetectOnDetach();
    }
    super.onDetach();
}

А затем расширяет ваши фрагменты из BaseFragment следующим образом

public class MyFragment extends BaseFragment {
// .....
}
person Hank Moody    schedule 11.10.2016
comment
Такое же поведение вы можете использовать в onAttach(Context context); метод (может быть, будет даже лучше) - person Hank Moody; 11.10.2016
comment
Да, я мог бы это сделать, но я создаю проект библиотеки и не хочу навязывать такие вещи, как использование базового класса. Но я думаю, что других способов сделать это нет. - person Victor Manuel Pineda Murcia; 11.10.2016

Вы можете использовать метод onAttach() фрагмента.

person Jan Slominski    schedule 11.10.2016
comment
Операция прослушивания для фрагментных транзакций выполняется в классе, который имеет доступ только к экземпляру действия и его FragmentManager. Я отредактирую свой вопрос, чтобы уточнить. - person Victor Manuel Pineda Murcia; 11.10.2016
comment
Вы когда-нибудь догадывались об этом? Я только что попробовал прослушиватель onBackStackChange, но он никогда не вызывается даже после его установки с помощью FragmentManager. - person John Glen; 02.10.2020