碎片转换存在的问题

3

我在一个活动中有两个片段,我想让第一个片段从屏幕左侧平稳滑出视图,同时第二个片段从屏幕右侧进入视图。我正在使用Transitions API,以下是发生的情况:

初始屏幕:

Initial screen

转换效果差:

Transition occurs poorly

我的代码如下:

HomeFragment savedHomeFragment = (HomeFragment) getSupportFragmentManager().findFragmentByTag(HOME_FRAGMENT);

    if (savedHomeFragment == null) {
        mHomeFragment = new HomeFragment();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mHomeFragment.setEnterTransition(new Fade(Fade.MODE_IN));
            mHomeFragment.setExitTransition(new Slide(Gravity.START));
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.placeholder, mHomeFragment, HOME_FRAGMENT);
        fragmentTransaction.commit();
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            savedHomeFragment.setEnterTransition(new Fade(Fade.MODE_IN));
            savedHomeFragment.setExitTransition(new Slide(Gravity.START));
        }
    }

void buttonClick() {
    TargetFragment targetFragment = new TargetFragment();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        targetFragment.setEnterTransition(new Slide(Gravity.END));
    }
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.placeholder, targetFragment , TARGET_FRAGMENT);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

我做错了什么?

1个回答

1
你的第一个片段上的按钮被放置在没有背景的容器上。你看到的白色背景是你的Activity的背景。在Fragment1布局的根元素上提供一个背景颜色,你的问题就会得到解决。

1
哇,仅仅这一行代码就结束了我数周的研究。非常感谢你,孩子。现在一切都好了,只是活动片段似乎会覆盖在传入的片段上方。这个问题能解决吗?比如让所有东西平滑移动。我的意思是让传入的片段包含整个视图,就像传出的片段正在离开一样。 - Julius Lamar
@JuliusLamar,我目前遇到了这个问题(在前进导航时,外向片段会覆盖在传入片段的上方)。你有找到解决方法吗? - sbearben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接