我正在将片段替换为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();
答案 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
并返回平滑过渡。