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