Как я могу добиться обратного перехода, когда задний стек FragmentManager выталкивается вручную?
Я использую библиотеку совместимости v4 и переключаюсь на новые фрагменты, например так:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
transaction.replace(R.id.contentFragmentContainer, event.getFragmentClass().newInstance(), FRAGMENT_CONTENT);
transaction.addToBackStack(fragmentTransactionName);
transaction.commit();
Теперь, когда я хочу программно вернуться к предыдущему фрагменту, не загрязняя задний стек пользователя новыми транзакциями фрагментов, я использую popBackStackImmediate()
:
if (fragmentManager.popBackStackImmediate(fragmentTransactionName, 0)) {
return;
}
// apparently popping back to that fragment was not successful,
// make a regular transaction now
Это работает все отлично, как есть, несмотря на то, что анимации, которые были использованы для анимации одного из извлеченных фрагментов, не инвертируются. Я также пытался использовать transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
заранее, но это даже не показывало переход, когда имела место обычная транзакция, и не показывало обратное.
Что я делаю неправильно?
1 ответ
Я бы сказал, что мне лучше читать The Fine Manual (TM):
public abstract FragmentTransaction setCustomAnimations
(int enter, int exit, int popEnter, int popExit)
"Настройте определенные ресурсы анимации для запуска фрагментов, которые входят и выходят в этой транзакции. Анимации popEnter и popExit будут воспроизводиться для операций ввода / вывода, особенно при извлечении заднего стека".
( Источник)