片段替换闪烁的旧片段

时间:2015-01-03 17:36:01

标签: android-fragments

我正在将片段替换为framelayout.But当我替换时,旧片段显示一秒然后它正在替换。我如何防止闪烁旧片段?我正在使用此代码:

FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
SettingsFragment conv=new SettingsFragment();
SettingsFragment.newInstance(LOGGED_USERNAME);
fragmentTransaction.replace(R.id.container,conv);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

3 个答案:

答案 0 :(得分:5)

我的手机最近已经升级到Marshmallow(Galaxy S6),从那时起我的所有碎片都“闪光”而不是片段转换过去提供的快速淡入/微妙放大。完全删除事务的转换:

fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

似乎已经解决了这个问题。我建议尝试在事务上实现自定义动画,看看是否有帮助。

答案 1 :(得分:1)

我有同样的问题。我找到了一个解决方法 - 首先添加新片段,然后显示它并隐藏旧片段。然后在异步任务中删除旧的。解决方案有点令人困惑,但我找不到更好的东西。 在以下示例中,旧片段包含标记fragment,新标记fragment2

FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().add(R.id.content_frame, fragment, "fragment2").commit();
                fragmentManager.beginTransaction().show(fragment).commit();
                fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("fragment")).commit();
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {

                    @Override
                    public void run() {
                        getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag("fragment")).commit();                      
                    }
                }, 1000);

答案 2 :(得分:0)

我有同样的问题。在我的情况下,它是由:

引起的
android:animateLayoutChanges="true"

刚从闪烁的片段中移除android:animateLayoutChanges并返回平滑过渡。