美文网首页
使用ViewPager出现的异常“The specified c

使用ViewPager出现的异常“The specified c

作者: Mr_Ashin | 来源:发表于2017-11-22 11:44 被阅读0次

在Android开发过程中,可能会遇到各式各样的bug,项目中,使用ViewPager还是很常见的,果然使用中一不小心还是踩到了坑:

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

从字面意思理解,你的子View已经有一个Parent了,在你再次使用这个子View的时候你必须先进行remove父View。仔细体会就是 一个子View只能隶属于一个Parent。

ok,我们定位到代码抛错的地方

.GoodsDetailActivity$ImagePagerAdapter.instantiateItem(GoodsDetailActivity.java:81)

我们看一下代码:

81行抛出异常代码

根据前面抛出的异常分析判断一个子View只能隶属于一个parent。

这里我们的子View是ViewPager需要add的View,Parent即ViewPager中的一页。

话不多少分析代码发现,这里每次添加到list中的都是同一个view:

修改前代码

ViewPager进行切换的时候,使用的是同一个子view,而一个子View只能有一个Parent,就像是幼儿园放学接送孩子,幼儿园即是容器ViewPager,小孩子即View,接送父母即ParentView。当把小孩给错误的父母接走当然会出错发生情节严重的事情,即Crash。

解决方法,ViewPager中每个Parent对应不同的子View

修改后代码

这里补充一句,解决这一Bug的关键核心就在于:一个子View只能隶属于一个Parent,具体代码具体分析。

最后附上做的效果图:

原GIF超过5M,压缩后的渣渣画质

相关文章

网友评论

      本文标题:使用ViewPager出现的异常“The specified c

      本文链接:https://www.haomeiwen.com/subject/bejnvxtx.html