在Android開發(fā)過程中践美,可能會(huì)遇到各式各樣的bug,項(xiàng)目中找岖,使用ViewPager還是很常見的陨倡,果然使用中一不小心還是踩到了坑:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
從字面意思理解,你的子View已經(jīng)有一個(gè)Parent了许布,在你再次使用這個(gè)子View的時(shí)候你必須先進(jìn)行remove父View兴革。仔細(xì)體會(huì)就是 一個(gè)子View只能隸屬于一個(gè)Parent。
ok蜜唾,我們定位到代碼拋錯(cuò)的地方
.GoodsDetailActivity$ImagePagerAdapter.instantiateItem(GoodsDetailActivity.java:81)
我們看一下代碼:
根據(jù)前面拋出的異常分析判斷一個(gè)子View只能隸屬于一個(gè)parent杂曲。
這里我們的子View是ViewPager需要add的View,Parent即ViewPager中的一頁(yè)袁余。
話不多少分析代碼發(fā)現(xiàn)擎勘,這里每次添加到list中的都是同一個(gè)view:
ViewPager進(jìn)行切換的時(shí)候,使用的是同一個(gè)子view颖榜,而一個(gè)子View只能有一個(gè)Parent棚饵,就像是幼兒園放學(xué)接送孩子,幼兒園即是容器ViewPager掩完,小孩子即View噪漾,接送父母即ParentView。當(dāng)把小孩給錯(cuò)誤的父母接走當(dāng)然會(huì)出錯(cuò)發(fā)生情節(jié)嚴(yán)重的事情且蓬,即Crash欣硼。
解決方法,ViewPager中每個(gè)Parent對(duì)應(yīng)不同的子View
這里補(bǔ)充一句缅疟,解決這一Bug的關(guān)鍵核心就在于:一個(gè)子View只能隸屬于一個(gè)Parent分别,具體代碼具體分析。
最后附上做的效果圖: