解决方法很简单,用setCustomAnimations(int, int)代替setCustomAnimations
(int, int, int, int)
弹出回栈时不会播放动画。希望对您有所帮助。
更新
我已经写好了你需要使用的方法。请检查一下。这是一个例子,
transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
使用带有两个参数而不是四个参数的方法。前两个参数指定进入动画,后两个参数指定退出动画。希望你现在明白了。
更新 2
我已根据您的情况更新了此答案。前一种方法只会在提交前禁用动画,对你没有用处。因此,如果您想在提交后禁用动画,则需要执行更多步骤。我会给你一个详细的答案。
第 1 步
您需要创建一个静态布尔变量来检查何时启用和禁用片段动画,
public class FragmentUtils {
public static boolean mDisableFragmentAnimations = false;
}
第 2 步
您需要覆盖每个要启用/禁用动画的片段的 onCreateAnimation() 方法,
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
if (FragmentUtils.mDisableFragmentAnimations) {
Animation a = new Animation() {};
a.setDuration(0);
return a;
}
return super.onCreateAnimation(transit, enter, nextAnim);
}
第 3 步
当您需要返回没有动画的主片段时,只需调用此方法即可。
public void clearBackStack() {
FragmentUtils.mDisableFragmentAnimations = true;
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentUtils.mDisableFragmentAnimations = false;
}
这将首先禁用动画,然后从返回堆栈中弹出片段并再次打开动画。
我自己尝试过这个解决方案,它非常适合我记住你的特殊情况。