一.发现问题
“java.lang.IllegalStateException:
The specified child already has a parent. You must call removeView() on the child's parent first.”
//指定的子元素已经有父元素。你必须首先在子元素的父元素上调用removeView()。
二.分析问题
我们在使用ViewPager的时候,有时会在ViewPager的Item中嵌套各种东西,如Fragment、GridView等,来展示更多的内容。
这个问题就是我在将GradView塞到ViewPager的Item中出现的,我是将ViewPager放在Dialog里面,再把GridView放在ViewPager里面,一个弹窗里面可以滑动并选择。类似下面这个样子↓
一开始是只有两个页面的时候完全没有问题,当页面多于两个的时候就会崩溃,并报子元素已有父元素这个错误,然后问题定位到.addview()这个地方,也就是说在添加GridView的时候出现了这个错误,那就说明我要填加的GridView就已经有了父元素,那我们就让有了父元素的给它remove掉。
三.解决方法
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
container.addView(view);
在addView前做一个是否有父元素的判断,若有就将它remove掉,没有就正常添加,这样问题就解决了。