最近开发通过addView 去动态加载 View的时候报了一个错

关于一个addview 开发问题的小计
代码是这样写的,结果报了异常

The specified child already has a parent. You must call removeView() on the child's parent first.

意思就是这个子view 已经有一个parent了,你需要先在这个子view的parent先将其移除才可以

然后就带着这样一个疑问,这个子view是如何判断parent的,带着这样一个疑问去源码查看,本来想通过搜索上面那段英文去找抛异常的代码,结果没想到源码是这么写的

关于一个addview 开发问题的小计

难怪搜不到

之前好像写过一个关于addView类似的博文,这个抛异常的方法主要是这个

addViewInner()

关于一个addview 开发问题的小计

那么child的parent怎么得到的呢

在刚刚上面这个方法中,后面的代码里

关于一个addview 开发问题的小计

这里child里的mParent指向了当前的viewGoup 这样就完成了绑定,然后child.gerParent()返回的就是这个mParent

这个mParent 在View 类

关于一个addview 开发问题的小计

这个ViewParent 是一个接口

所以修改后的代码师这样的

关于一个addview 开发问题的小计

 

 

相关文章: