您的位置:首页 > 编程语言 > Java开发

java.lang.IllegalStateException: The specified child already has a parent 错误处理

2016-07-14 11:35 579 查看
今天在项目中发现,ViewPager的内容在动态更新之后,重复点击使用可能出现如题所述的错误,而根据错误日志的描述,错误的根源是在adapter中的
instantiateItem()
方法。而该问题的解决办法在StackOverflow中已经有了很好的解释,下面原文搬运如下:

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()
方法中的代码如下:

@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(view);
return view;
}


根据上文中的描述,我们在返回view之前做一下处理,代码如下

@Override
public Object instantiateItem(ViewGroup container, int position) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeAllViews();
}
container.addView(view);
return view;
}


防止出现一个view拥有多个parent的情况,即可避免上述错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager