viewpager动态添加页面或者删除页面时出现了问题(java.lang.IllegalStateException: The specified child already has a paren

  /*viewpager页数 Integer.MAX_VALUE无限循环*/
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    /*复用对象 true 复用view false 复用的是Object*/
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    /*初始化*/
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (mViewItems.size() != 0 && mVpTotalNum != 0) {
            View view = mViewItems.get(position % mVpTotalNum);

            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null) {
                parent.removeView(view);
            }
//            LogUtils.e("instantiateItem",view+"");
            container.addView(view);
            return view;
        }
        return null;
    }

    /*销毁*/
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        LogUtils.e("destroyItem",object+"");
//        container.removeView( mViewItems.get(position % mVpTotalNum));
    }
}
 

/**
 * 无限轮播的adapter 解决低于三个轮播图崩溃问题
 * Created by Administrator on 2016/4/12.
 */
public class AcActivityAdapter extends PagerAdapter {


    private Context mContext = MyApplication.getInstance().getApplicationContext();
    private Resources mResources = mContext.getResources();

    private List<View> mViewItems = new ArrayList<>();
    private List<View> mDotsIvs = new ArrayList<>();
    private int mVpTotalNum;
    private int mVpNum;

    //TODO 修改传入的值
    public AcActivityAdapter(HomeBean.Ads data, ViewPager viewPager, LinearLayout llDots,final ActivityRvAdapter.OnClickListener onClickListener) {
        super();
       final List<HomeBean.Ads.Img> imgList = data.getImgList();
        mVpTotalNum = imgList.size();

        int dotsPx = GlobalUtils.dip2pix(mContext, 7f);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dotsPx, dotsPx);
        layoutParams.setMargins(dotsPx / 2, dotsPx, dotsPx, dotsPx);

        if (mVpTotalNum != 0) {
            /*viewPager的滚动监听 改变指示圆点状态*/
            viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    mVpNum = (position % mVpTotalNum);
                    for (View view : mDotsIvs) {
                        if (mVpNum == (int) view.getTag()) {
                            view.setSelected(true);
                        } else {
                            view.setSelected(false);
                        }
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

            for (int i = 0; i < mVpTotalNum; i++) {
                //TODO  修改返回Bean 修改url地址
                String url = imgList.get(i).getImgDetail().getImgAdd();
                Uri uri = Uri.parse(url);
                //新建圆点
                View dotsView = new View(mContext);
                dotsView.setLayoutParams(layoutParams);
                dotsView.setTag(i);
                dotsView.setBackgroundResource(R.drawable.banner_dots_selector);
                //默认第一个着色
                if (i == 0) {
                    dotsView.setSelected(true);
                }
                mDotsIvs.add(dotsView);
                //在linearLayout上添加圆点 防止每次回收时重新刷新导致添加过多的圆点
                if (llDots.getChildCount() < mVpTotalNum) {
                    llDots.addView(dotsView, i);
                }
                //viewPager的itemView
                SimpleDraweeView simpleDraweeView = new SimpleDraweeView(mContext);
                GenericDraweeHierarchy vpGdh = new GenericDraweeHierarchyBuilder(mResources)
                        .setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY)
                        .build();
                simpleDraweeView.setHierarchy(vpGdh);
                simpleDraweeView.setImageURI(uri);

                simpleDraweeView.setClickable(true);
                simpleDraweeView.setFocusable(true);
                mViewItems.add(simpleDraweeView);

                simpleDraweeView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //TODO 修改点击事件 TODO 返回值
                        if (onClickListener != null) {
                            onClickListener.onClick(v, imgList.get(mVpNum).getTargetName());
                        }
                    }
                });
            }
        }
    }

    /*viewpager页数 Integer.MAX_VALUE无限循环*/
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    /*复用对象 true 复用view false 复用的是Object*/
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    /*初始化*/
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (mViewItems.size() != 0 && mVpTotalNum != 0) {
            View view = mViewItems.get(position % mVpTotalNum);

            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null) {
                parent.removeView(view);
            }

            container.addView(view);
            return view;
        }

        return null;
    }

    /*销毁*/
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      //  container.removeView(mViewItems.get(position % mVpTotalNum));
    }
}

 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值