Изменить анимацию фрагмента уже в стеке

Предположим, что я запустил следующий код, чтобы поместить фрагмент в стек. Он устанавливает анимацию, когда я сначала просматриваю фрагмент и когда выйдет фрагмент.

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_left,
                                        R.anim.no_anim,
                                        R.anim.no_anim_show,
                                        R.anim.slide_right_away);
fragmentTransaction.replace(R.id.container, fragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.commit();

Если я хочу изменить анимацию выхода позже, как я могу это сделать? Как и в, если бы у меня был следующий код:

getFragmentManager().popBackStack();

Но мне нужна другая анимация, затем я был первоначально помещен в стек.

Ответ 1

Следующее - это то, что я пробовал, и он работал:

getFragmentManager().beginTransaction().setCustomAnimations(
        R.anim.slide_left, R.anim.new_anim)
        .remove(fragment)
        .commit();

Итак, похоже, что я должен явно "удалить" фрагмент в новой транзакции фрагмента, чтобы использовать новую анимацию выхода

Ответ 2

Вы можете изменить пользовательскую анимацию, прежде чем появляться из заднего стека

getFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_left,
            R.anim.no_anim,
            R.anim.no_anim_show,
            R.anim.new_pop_exit).commit();

и выполнить незавершенные транзакции перед тем, как выложить стек

getFragmentManager().executePendingTransactions();
getFragmentManager().popBackStackImmediate();

Примечание: анимации popExit будут воспроизводиться для операций выхода, особенно при появлении заднего стека