我的程序有两个视图
一个是主视图MainView,继承自SurfaceView
activity启动是就是设置这个视图为当前视图
还有一个是opengl的视图GlView,继承自GLSurfaceView
这两个视图之间没有任何关系
只是在MainView里的一个按钮里,点击一下就会调用setContentView(GlView)切换到gl视图显示
这时没有任何问题
而在GlView里调用setContentView(MainView)切换回去的时候出现异常了ERROR/AndroidRuntime(4078): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.我程序里的这两个视图根本就没有什么父子关系的
为什么会有这样的异常?
一个是主视图MainView,继承自SurfaceView
activity启动是就是设置这个视图为当前视图
还有一个是opengl的视图GlView,继承自GLSurfaceView
这两个视图之间没有任何关系
只是在MainView里的一个按钮里,点击一下就会调用setContentView(GlView)切换到gl视图显示
这时没有任何问题
而在GlView里调用setContentView(MainView)切换回去的时候出现异常了ERROR/AndroidRuntime(4078): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.我程序里的这两个视图根本就没有什么父子关系的
为什么会有这样的异常?
解决方案 »
- android推送
- 怎么做出这种效果的下拉框 ???
- framework关于phonewindow.java的onConfigurationChanged()函数
- android问题,,大侠们帮忙咯
- opencore中一个mp4文件,音视频是怎么分离的?在哪实现?
- TableRow中动态布局之后,控件不显示
- Android 我用zxing开发二维码扫描 为什么只能扫描一次
- android中ListView动态加载更多checkbox的问题
- 造起来,茄泥们!联想茄子快传创意征集大赛期待您的参与~
- EventBus3.0使用异常
- android编译时没错误,但是不能执行,求救!
- android google map key 现在申请不了了
你可以都加在在一个容器中,用隐藏和显示来切换。
对android框架不了解
具体怎样可用remove掉之前的mainview呢?
只是在MainView里的一个按钮里...
...SurfaceView里只能有一个直接子类,你可以用一个其它布局把里面的所有控件装起来,再把这个布局放在SurfaceView里就可以了,如果还没有解决,贴出你的XML布局来看看。
这是什么意思,一个程序里只能有一个view继承SurfaceView?
<ScrollView ...>
<Button />
<Button />
<Button />
</ScrollView>
这样是错的 必须这样:
<ScrollView ...>
<LinearLayout ...>
<Button />
<Button />
<Button />
</LinearLayout>
</ScrollView>
可能我没描述清楚
其实我的两个view里都没有任何的android控件
都是自己画的东西,跟android相关的也就bitmap
我这里说的点击按钮切换到glview,其实这个按钮是自己画的一个东西
MainView.removeAllViews();
两个分别加上试试
试试7楼,不好意思。
我试了一下都没有这样的方法
remove开头的只有removeCallbacks
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout=new LinearLayout(this);
SurfaceView surfaceView =new SurfaceView(this);
layout.addView(surfaceView);
setContentView(layout); //设置显示为layout
//跳转时先删除
layout.removeAllViews();
GLSurfaceView glSurfaceView=new GLSurfaceView(this);
layout.addView(glSurfaceView);
setContentView(layout);
}