2

我在 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 动画(这里我不是添加新片段,而是重新附加已经存在的片段)。有没有办法避免这种行为,让片段与活动视图一起出现?

4

1 回答 1

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。

于 2012-07-31T00:06:29.680 回答