java.lang.IllegalStateException: The specified child already has a parent.解決方案
阿新 • • 發佈:2018-11-01
公司的老專案,裡面使用的viewpager,最近測試反饋說閃退了,翻到日誌看到報如下錯誤java.lang.IllegalStateException: The specified child already has a parent.然後就找度娘,果不其然,度娘沒有讓我失望,找到了解決方法,為了防止以後在遇到類似錯誤,還是做個記錄吧。
一,報錯原因
根據The specified child already has a parent. You must call removeView() on the child’s parent first.日誌資訊,不難讀懂大致意思是子view已經擁有一個父佈局,我們需要先讓該子view的父佈局呼叫一下 removeView()方法。也就是說一個子view只能擁有一個父view,這種情況往往會出現在動態新增view上,我們新增子view的時候,並不知道子view是不是已經擁有一個父view,如果說已經存在一個父view那麼就會報以上錯誤。
二,解放方案
根據錯誤資訊定位到是在instantiateItem此方法中,在此方法新增動態view之前,先做子view是否已經具有父view的判斷,如果存在就呼叫 removeView()方法。
@Override public Object instantiateItem(View container, final int position) { View v=views.get(position); ViewPager parent = (ViewPager) v.getParent(); if (parent != null) { parent.removeAllViews(); } ((ViewPager) container).addView(views.get(position), 0); return views.get(position); }