bug_ _fragment_“The specified child already has a parent. You must call removeView"的解决以及产生的原因
2016-04-07 23:42
405 查看
这个异常的出现往往是因为非法使用了某些方法引起的。
从字面意思上是说这个特定的child已经有一个parent了,你必须在这个parent中首先调用removeView()方法,才能继续你的内容。这里很明显这个child是一个View,一个子(child)View必须依赖于父(parent)View,如果你要使用这个child,则必须通过parent,而你如果就是硬想使用这个child,那么就得让这个child与parent脱离父子关系(即removeView())
何时会出现这种异常呢,典型的是在使用Fragment的时候,在Fragment的
这段代码运行之后即会报出这样的错误
这是因为,返回的
原来在
从字面意思上是说这个特定的child已经有一个parent了,你必须在这个parent中首先调用removeView()方法,才能继续你的内容。这里很明显这个child是一个View,一个子(child)View必须依赖于父(parent)View,如果你要使用这个child,则必须通过parent,而你如果就是硬想使用这个child,那么就得让这个child与parent脱离父子关系(即removeView())
何时会出现这种异常呢,典型的是在使用Fragment的时候,在Fragment的
onCreateView中有这样一段代码:
这是因为,返回的
mDrawerListView他有一个parent,正确的做法是返回drawerListViewContainer,其实这也是我的本意,因为大意才写成了返回mDrawerListView。
不过仔细想想,为什么就不能返回mDrawerListView呢,都是view 没有本质区别啊,这还得看出现这个异常信息的地方发生了什么事,从上面的log中我们知道这个异常产生在ViewGroup的addViewInner方法中。addViewInner的代码如下(部分):[/code]
addViewInner中判断了child的parentview 必须为null,否则抛出一个异常。 也就是框架的设计者希望这里必须是一个没有parent的view,如果你不这么做,那么只好给你抛出个异常了,强制这样做也许是为了防止某些问题产生。
相关文章推荐
- wparam,lparam在WIN32 API编程中的具体意义
- bzoj3190【JLOI2013】赛车
- spring的IOC和AOP详细讲解
- 和为n的连续自然数序列
- 【LeetCode】61. Rotate List解法及分析
- 好久没加博客了。。。
- css3 图片翻转效果
- Splay Tree的C++实现
- 学习\代码量
- 在Vim中使用ctags
- 设计模式之状态模式
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- 线程池中CompletionService的应用
- 实时的工业以太网Ethernet Powerlink
- jquery动画累积执行解决方法
- Syntax error, insert "}" to complete Class body.
- spring的IOC和AOP详细讲解
- [IO]——指定字符集
- Bootstrap起步介绍
- $科大讯飞语音听写接口使用的封装