所以 Warpzit 是在正确的轨道上,他只是没有很好地解决你的具体问题。我遇到了完全相同的问题,这就是我解决它的方法。
首先,我创建了一个静态布尔变量(为了简单起见,让我们将其放入 FragmentUtils 类中)...
public class FragmentUtils {
public static boolean sDisableFragmentAnimations = false;
}
然后,在您拥有的每个片段中,您需要重写 onCreateAnimation 方法......
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
if (FragmentUtils.sDisableFragmentAnimations) {
Animation a = new Animation() {};
a.setDuration(0);
return a;
}
return super.onCreateAnimation(transit, enter, nextAnim);
}
然后,当您需要从活动中清除后台堆栈时,只需执行以下操作...
public void clearBackStack() {
FragmentUtils.sDisableFragmentAnimations = true;
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentUtils.sDisableFragmentAnimations = false;
}
瞧,调用clearBackStack() 将使您回到根片段,而没有任何过渡动画。
希望大G将来能添加一种不那么愚蠢的方法来做到这一点。