Как я могу добиться обратного перехода, когда задний стек 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 будут воспроизводиться для операций ввода / вывода, особенно при извлечении заднего стека".

( Источник)

Другие вопросы по тегам