Java 更改堆栈中已存在片段的动画

Java 更改堆栈中已存在片段的动画,java,android,animation,android-fragments,Java,Android,Animation,Android Fragments,假设我运行以下代码将一个片段放入堆栈中。它为我最初查看片段和退出片段设置动画 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_left,

假设我运行以下代码将一个片段放入堆栈中。它为我最初查看片段和退出片段设置动画

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();

但是我想要一个不同于我最初放入堆栈的动画。

您可以在从后堆栈弹出之前更改自定义动画

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动画将为退出操作播放,特别是在弹出后堆栈时。以下是我尝试过的,并且成功了:

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

因此,看起来我必须在一个新的片段事务中显式地“删除”该片段,以便利用新的退出动画,这似乎不起作用。我想知道,由于这是一个新的片段事务,我们正在添加新的动画,旧事务上的动画是否仍然保留并执行。