android lollipop - setentertransition()片段在退出时无法正常工作

时间:2014-12-16 13:08:59

标签: android android-fragments android-animation android-5.0-lollipop android-transitions

在替换片段时,我正在使用适用于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有类似的东西吗?

2 个答案:

答案 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();
    }
});

不确定为什么这会解决问题(或者这是绝对正确的解决方案),但它对我有用。