使用ViewPager出現(xiàn)的異常“The specified child already has a parent. You must call removeView() on the child's parent first.”

在Android開發(fā)過(guò)程中,可能會(huì)遇到各式各樣的bug,項(xiàng)目中,使用ViewPager還是很常見(jiàn)的,果然使用中一不小心還是踩到了坑:

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)

我們看一下代碼:

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,具體代碼具體分析。

最后附上做的效果圖:

原GIF超過(guò)5M,壓縮后的渣渣畫質(zhì)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容