分离时,SurfaceView会清除它的内容

时间:2015-01-28 17:52:33

标签: android android-fragments surfaceview

我在Fragment中使用SurfaceView。当我用另一个替换片段时,SurfaceView会闪烁黑色一秒钟,然后SurfaceView的片段被分离。

一个流行的建议是使用setZOrderOnTop(true)。但是当我使用它时,SurfaceView只有与背景相同的颜色,并且不会闪烁。但随后它显示了其他UI元素并产生了更多问题。

我注意到在两种情况下,SurfaceView都会在销毁之前清除其内容,因此setZOrderOnTop并不重要。

有人可以解释为什么SurfaceView在分离时会清除其内容吗?但是另一个UI元素(按钮,列表)没有这种行为。

修改 调用SurfaceView类的方法onWindowVisibilityChanged时,SurfaceView将清除。

1 个答案:

答案 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也闪烁黑色,但此刻不可见。