5

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

4

2 回答 2

2

我遇到了同样的问题,来自 Fragment B -> A 的 onReturn,Fragment 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);
}
于 2015-06-04T21:33:52.343 回答
0

我在大致相同的模式下遇到了同样的问题,并且能够通过发布我的片段转换来解决它:

new Handler().post(new Runnable() {
    @Override
    public void run() {
        page.setEnterTransition(new Slide());
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.root_layout, page, "current")
                .commit();
    }
});

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

于 2015-05-13T21:24:27.083 回答