在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,压缩后的渣渣画质
网友评论