在替换片段时,我正在使用适用于Android棒棒糖版本的幻灯片动画。对于这种特殊的替换,它可以正常工作,但是在按下后退按钮时,它首先弹回当前的片段和放大器。然后执行反向输入动画(滑出)。
private void replaceContentFrameByFragment(Fragment replaceBy, String replaceByFragmentTag) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setDuration(1000);
replaceBy.setEnterTransition(slide);
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, replaceBy, replaceByFragmentTag);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
那么,如何在完成幻灯片的反向动画后强制片段弹回?我注意到该活动提供了方法finishAfterTransition()。 frgament有类似的东西吗?
答案 0 :(得分:1)
我有同样的问题,从片段B返回 - > A,片段B似乎正在进行额外的幻灯片转换。为了解决这个问题,我进行了setReturnTransition()
的淡入淡出转换,时间比看起来非常好的幻灯片(因为它溶解到之前的片段中)更短。代码是:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Slide slideRight = new Slide(Gravity.RIGHT);
slideRight.setDuration(200);
fragment.setEnterTransition(slideRight);
Fade fade = new Fade();
fade.setDuration(100);
fragment.setReturnTransition(fade);
}
答案 1 :(得分:0)
我遇到了大致相同模式的相同问题,并且能够通过发布我的片段转换来解决它:
new Handler().post(new Runnable() {
@Override
public void run() {
page.setEnterTransition(new Slide());
getFragmentManager()
.beginTransaction()
.replace(R.id.root_layout, page, "current")
.commit();
}
});
不确定为什么这会解决问题(或者这是绝对正确的解决方案),但它对我有用。