Android - 如何关闭或隐藏视图并将其恢复

时间:2012-03-02 22:57:31

标签: android view visibility

我的应用程序中有三个视图,我希望能够隐藏它们并有选择地将它们带回来。我尝试使用按钮点击事件触发的以下内容:

 if(SurfaceView().isShown()==true){
            SurfaceView().setVisibility(View.INVISIBLE);
        }else if(!SurfaceView().isShown()){
            SurfaceView().setVisibility(View.VISIBLE);
        }

然而,这通常会冻结视图,然后关闭应用程序,除了以下内容之外没有错误:

NvRmChannelSubmitt:NvError_IoctlFailed,错误代码为14

编辑:我所指的观点实际上是min3d渲染中的_glsurfaceview

public class RendererActivity extends Activity implements ISceneController
{
public Scene scene;
protected static GLSurfaceView _glSurfaceView;

我的主要活动是扩展RenderActivity

编辑:添加了logcat转储

关闭时出现的唯一事情是这些

03-02 15:57:00.338: I/Min3D(28364): Renderer.onSurfaceChanged()
03-02 15:57:00.355: D/(28364): NvRmChannelSubmit: NvError_IoctlFailed with error code 14

3 个答案:

答案 0 :(得分:2)

您的代码中可能会有一个复制/粘贴拼写错误。您是否尝试显示glSurfaceView SurfaceView是否隐身?如果是这样,试试这个:

if( SurfaceView().isShown() )
{
  glSurfaceView().setVisibility(View.GONE);
}
else if ( !SurfaceView().isShown() )
{
  glSurfaceView().setVisibility(View.VISIBLE);
}

答案 1 :(得分:1)

使用View.GONE会使视图不可见,并且不会占用布局中的任何空间。

答案 2 :(得分:1)

所以我解决了我的问题。我想当你使用opengl和glsurfaceviews时,你必须将我上面的内容改为以下内容:

   if(glSurfaceView().isShown()==true){
            SurfaceView().onPause();<----------------------added to pause view
            SurfaceView().setVisibility(View.GONE);
        }else if(!glSurfaceView().isShown()){
            SurfaceView().onResume();<---------------------added to resume view
            SurfaceView().setVisibility(View.VISIBLE);
        }

SurfaceView()。onPause()告诉glsurfaceview我希望渲染器暂停,反之亦然onResume()。

现在我不确定这是针对这种情况的最终解决方案,但它正在为此工作。