美文网首页
使用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