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);


        }

猜你喜欢

转载自blog.csdn.net/wangbhan/article/details/83576799
今日推荐