我在Fragment中使用SurfaceView。当我用另一个替换片段时,SurfaceView会闪烁黑色一秒钟,然后SurfaceView的片段被分离。
一个流行的建议是使用setZOrderOnTop(true)
。但是当我使用它时,SurfaceView只有与背景相同的颜色,并且不会闪烁。但随后它显示了其他UI元素并产生了更多问题。
我注意到在两种情况下,SurfaceView都会在销毁之前清除其内容,因此setZOrderOnTop
并不重要。
有人可以解释为什么SurfaceView在分离时会清除其内容吗?但是另一个UI元素(按钮,列表)没有这种行为。
修改
调用SurfaceView类的方法onWindowVisibilityChanged
时,SurfaceView将清除。
答案 0 :(得分:0)
我找到了一个解决方法 - 首先添加新片段,然后显示它并隐藏旧片段。然后在异步任务中删除旧的。解决方案有点令人困惑,但我找不到更好的东西。
在以下示例中,旧片段包含标记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);
在这种方法中,SurfaceView也闪烁黑色,但此刻不可见。