防止片段自定义动画在屏幕旋转时播放?

时间:2012-07-11 20:58:17

标签: android android-fragments

我在FragmentTransaction中使用自定义动画作为我的秒表片段。这是代码:

private void addStopWatch() {
    if(_stopwatchFragment == null) {
        _stopwatchFragment = new StopwatchFragment();

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.anim_slide_down, R.anim.anim_slide_up)
                           .add(R.id.ContentContainer, _stopwatchFragment, STOPWATCH_TAG)
                           .commit();

        _stopwatchVisible = true;
    }
}

每当旋转屏幕时,再次播放R.anim.anim_slide_down动画(这里我没有添加新片段,我正在重新附加已经存在的片段)。有没有办法避免这种行为,只是让片段与活动视图一起出现?

1 个答案:

答案 0 :(得分:2)

通过在活动中使用静态字段可以轻松解决这个问题。将此声明为活动类的静态成员:

private static boolean hasAnimated = false;

然后在你的方法中你可以这样做:

private void addStopWatch() {
    if(_stopwatchFragment == null) {
        _stopwatchFragment = new StopwatchFragment();

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

        if(!hasAnimated) {
            fragmentTransaction.setCustomAnimations(R.anim.anim_slide_down, R.anim.anim_slide_up)
                               .add(R.id.ContentContainer, _stopwatchFragment, STOPWATCH_TAG)
                               .commit();
            hasAnimated = true
        } else {
            fragmentTransaction.add(R.id.ContentContainer, _stopwatchFragment, STOPWATCH_TAG)
                               .commit();
        }

        _stopwatchVisible = true;
    }
}

虽然我不确定这是否需要对活动进行适当的清理破坏。可以肯定的是,在onDestroy()中将hasAnimated设置为false。