1. 程式人生 > >java.lang.IllegalStateException: The specified child already has a parent.解決方案

java.lang.IllegalStateException: The specified child already has a parent.解決方案

公司的老專案,裡面使用的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);


        }