The specified child already has a parent错误

简介:

10-05 23:39:48.187: E/AndroidRuntime(12854): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.view.ViewGroup.addView(ViewGroup.java:1871)
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.view.ViewGroup.addView(ViewGroup.java:1828)
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.view.ViewGroup.addView(ViewGroup.java:1808)
10-05 23:39:48.187: E/AndroidRuntime(12854): at com.solar.WaterLevelActivity.InitUnitTimeLowestWaterLevel(WaterLevelActivity.java:49)
10-05 23:39:48.187: E/AndroidRuntime(12854): at com.solar.WaterLevelActivity.InitView(WaterLevelActivity.java:30)
10-05 23:39:48.187: E/AndroidRuntime(12854): at com.solar.WaterLevelActivity.onCreate(WaterLevelActivity.java:25)
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-05 23:39:48.187: E/AndroidRuntime(12854): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-05 23:39:48.187: E/AndroidRuntime(12854): ... 11 more

补充说明InitUnitTimeLowestWaterLevel()在OnCreate函数中被调用,用来初始化界面。实现的效果是动态添加界面。

下面是出错的代码

复制代码
1     private void InitUnitTimeLowestWaterLevel() {
2         LinearLayout listMachines = (LinearLayout) findViewById(R.id.water_level_page_water_level_setting);
3         LayoutInflater inflater = LayoutInflater.from(WaterLevelActivity.this);
4         View tlWaterLevelInfo = inflater.inflate(R.layout.unit_time_water_level_item, null);
5         listMachines.addView(tlWaterLevelInfo);
6         listMachines.addView(tlWaterLevelInfo);        //这个地方出错了。
7     }
复制代码

错误的原因:通过LayoutInflater实例化的一个布局(View)。被重复添加了两次。而一个View只能有一个父控件。当第二次添加的时候,又要改变这个控件的父控件(虽然是同一个父控件,但是也要通过改变该View的父控件来实现)。运行时又不允许一个有父控件的子控件在有了一个父控件时,改变他的父控件。

解决方案:重新用布局文件实例化一个子控件,再添加到父控件上。


作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/archive/2012/10/05/2712664.html

目录
相关文章
|
6月前
|
Java 应用服务中间件 Maven
解决A child container failed during start报错问题
解决A child container failed during start报错问题
|
1月前
|
JavaScript 前端开发 API
parent对象
parent对象是JavaScript中一个比较特殊的对象,它表示当前元素在其父元素中的相对位置。parent对象主要用于遍历和操作元素树,以及获取和设置元素的样式。 使用parent对
13 1
|
Docker 容器
no space left on device解决方法
no space left on device解决方法
|
PHP 数据库 开发者
Parent 关键字|学习笔记
快速学习 Parent 关键字
102 0
使用代码创建ABAP transparent table
使用代码创建ABAP transparent table
110 0
|
JavaScript Go
错误消息Parent objects have not been downloaded
错误消息Parent objects have not been downloaded
112 0
错误消息Parent objects have not been downloaded
|
JavaScript 前端开发
window.parent ,window.top,window.self 详解及parent和opener的区别
window.parent ,window.top,window.self 详解       在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。
1896 1