【问题标题】:Cannot disable fragment transaction animation when back button is clicked单击后退按钮时无法禁用片段事务动画
【发布时间】:2015-07-01 08:36:51
【问题描述】:

我为片段交易添加了弹出进入和弹出退出动画。单击后退按钮时,我不想播放此动画。有什么办法吗?

【问题讨论】:

  • 请提供代码sn-p,您在其中将自定义动画设置为片段事务?
  • FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction 事务 = fragmentManager.beginTransaction(); transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out,R.anim_left,R.anim.left); transaction.replace(R.id.fragment_container,片段); transaction.commit();

标签: android android-fragments android-activity


【解决方案1】:

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

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

我自己尝试过这个解决方案,它非常适合我记住你的特殊情况。

【讨论】:

  • Aritra Roy,当片段创建时,我想播放动画。仅用于我不想这样做的后堆栈
  • 我给了你解决方案。你用错了方法。
  • 我应该使用什么样的方法?
  • 我在答案本身中写了方法。请仔细检查。也更新了一个例子。
  • 抱歉评论有误。在我的情况下,根据布尔值,我在单击后退按钮时播放或不播放动画。所以,我的自定义动画必须有 4 个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多