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

Android 单击“后退”按钮时无法禁用片段事务动画,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我为片段事务添加了一个pop enter和pop exit动画。单击“上一步”按钮时,我不想播放此动画。有什么方法可以做到这一点吗 解决方案很简单,使用代替 弹出后堆栈时将不会播放动画。希望能有帮助 更新 我已经写了你需要使用的方法。请检查一下。举个例子, transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); 使用具有两个参数而不是四个参数的方法。前两个参数指定输入动画,后两个参数指定退出动画。希望你现在明白了 更新

我为片段事务添加了一个pop enter和pop exit动画。单击“上一步”按钮时,我不想播放此动画。有什么方法可以做到这一点吗

解决方案很简单,使用代替

弹出后堆栈时将不会播放动画。希望能有帮助

更新

我已经写了你需要使用的方法。请检查一下。举个例子,

transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
使用具有两个参数而不是四个参数的方法。前两个参数指定输入动画,后两个参数指定退出动画。希望你现在明白了

更新2

我已经根据你的情况更新了这个答案。前面的方法将仅在提交之前禁用动画,对您不有用。因此,如果要在提交后禁用动画,则需要执行更多步骤。我会给你一个详细的答复

第一步

您需要创建一个静态布尔变量来检查何时启用和禁用片段动画

public class FragmentUtils {
    public static boolean mDisableFragmentAnimations = false;
}
@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);
}
步骤2

您需要覆盖要启用/禁用动画的每个片段的onCreateAnimation方法

public class FragmentUtils {
    public static boolean mDisableFragmentAnimations = false;
}
@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;
}
这将首先禁用动画,然后从后堆栈中弹出片段并再次打开动画


我自己也尝试过这个解决方案,它非常适合我,记住您的特殊场景。

请提供代码片段,在其中您将自定义动画设置为片段事务?FragmentManager FragmentManager=getSupportFragmentManager;FragmentTransaction=fragmentManager.beginTransaction;transaction.setCustomAnimationsR.anim.fade_in,R.anim.fade_out,R.anim_left,R.anim.left;transaction.replaceR.id.fragment\u容器,fragment;transaction.commit;Aritra Roy,当片段创建时,我想播放动画。我不想这样做,我给了你解决方案。你使用了错误的方法。我应该使用什么样的方法?我在答案中写了这个方法。请仔细检查。还更新了一个示例。很抱歉评论错误。在我的情况下,根据布尔值,单击“后退”按钮时,我播放或不播放动画。因此,我的自定义动画必须有4个参数。