单击后退按钮时无法禁用片段事务动画

时间:2015-07-01 08:36:51

标签: android android-fragments android-activity

我为片段事务添加了弹出输入和弹出退出动画。单击后退按钮时,我不想播放此动画。有什么办法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

解决方案很简单,使用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;
}

这将首先禁用动画,然后从后堆栈中弹出片段并再次打开动画。

我自己尝试过这个解决方案,它对我来说非常有用,请记住你的特殊情况。