setContentView异常

zitengxin 2012-05-15 11:32:07
我的程序有两个视图
一个是主视图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.

我程序里的这两个视图根本就没有什么父子关系的
为什么会有这样的异常?
...全文
365 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
himi_ 2012-05-15
  • 打赏
  • 举报
回复
...
只是在MainView里的一个按钮里...
...

SurfaceView里只能有一个直接子类,你可以用一个其它布局把里面的所有控件装起来,再把这个布局放在SurfaceView里就可以了,如果还没有解决,贴出你的XML布局来看看。
zitengxin 2012-05-15
  • 打赏
  • 举报
回复
谢谢楼上
对android框架不了解
具体怎样可用remove掉之前的mainview呢?
rmm0001 2012-05-15
  • 打赏
  • 举报
回复
MainView 因为之前已经加载过了,有了父级别的容器,之后又加载就会报错,需要在加载之前,让mainview的父级别先remove掉mainview,才能加载mainview。
你可以都加在在一个容器中,用隐藏和显示来切换。
himi_ 2012-05-15
  • 打赏
  • 举报
回复

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);

}
zitengxin 2012-05-15
  • 打赏
  • 举报
回复
是我搞错了,后来加了个layout,这个mainview放layout里了
zitengxin 2012-05-15
  • 打赏
  • 举报
回复
这两个方法是哪个类里的
我试了一下都没有这样的方法
remove开头的只有removeCallbacks
himi_ 2012-05-15
  • 打赏
  • 举报
回复
哎呀。。。。 原来我把SurfaceView和ScrollView 看混了。。
试试7楼,不好意思。
himi_ 2012-05-15
  • 打赏
  • 举报
回复
GlView.removeAllViews();
MainView.removeAllViews();
两个分别加上试试
zitengxin 2012-05-15
  • 打赏
  • 举报
回复
谢谢楼上
可能我没描述清楚
其实我的两个view里都没有任何的android控件
都是自己画的东西,跟android相关的也就bitmap
我这里说的点击按钮切换到glview,其实这个按钮是自己画的一个东西
himi_ 2012-05-15
  • 打赏
  • 举报
回复
举例:
<ScrollView ...>
<Button />
<Button />
<Button />
</ScrollView>
这样是错的 必须这样:
<ScrollView ...>
<LinearLayout ...>
<Button />
<Button />
<Button />
</LinearLayout>
</ScrollView>
zitengxin 2012-05-15
  • 打赏
  • 举报
回复
我没用xml,都是动态写的

SurfaceView里只能有一个直接子类
这是什么意思,一个程序里只能有一个view继承SurfaceView?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧