java.lang.IllegalStateException: The specified child already has a parent. You must call removeView(

来源:互联网 发布:数据出境安全评估指南 编辑:程序博客网 时间:2024/05/16 18:08

 之前在开发的时候遇见过这个问题,现在想记录下来:


使用viewpager动态添加页面或者删除页面时出现了问题(java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first),在stackoverflow上找到了解决办法。(http://stackoverflow.com/questions/22936886/java-lang-illegalstateexception-while-using-viewpager-in-android)

原文是:

the problem is that in your adapters method instantiateItem

you call container.addView(v);

but every View can have only one parent,

so it can be added only one time to a container via addView(...).

When you open the popup the first time, everything works, because v

doesn't have a parent that time. But when you open your popupwinow the second time,it adds the view again to the container. That cerates the error.

Try to destroy the view if you close the popup view or remove all children views from it with

container.removeAllViews()

解决办法是在instantiateItem中使用如下方式:

ViewGroup parent = (ViewGroup) v.getParent();

 if (parent != null) {

parent.removeAllViews();

 } 

container.addView(v);中间很多次尝试已经接近答案,但是习惯性的去把v.getParent()强制转化为view,view没有removeView()方法,以至于放弃了这种方法,后来查了很多才发现应该是强转成ViewGroup;
0 0
原创粉丝点击