RecycleView和Checkbox结合使用的时候Checkbox的复用的问题

参考资料

public class PendingPrderAdapter extends RecyclerView.Adapter<PendingPrderAdapter.ViewHolder> {


    private final Context mContext;
    private ArrayList<SendOrderBean> mData;
    private OnViewItemClickListener mOnViewItemClickListener;
    //辅助的list来记录选中的item
    private List<Integer> checkPositionlist;
    public PendingPrderAdapter(Context context) {
        this.mContext = context;
        checkPositionlist = new ArrayList<>();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.layout_item_pending, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        //防止复用导致checkbox多选的问题
        holder.mItemPendingCb.setTag(new Integer(position));
        if (checkPositionlist != null){
            holder.mItemPendingCb.setChecked(checkPositionlist.contains(new Integer(position))?true:false);
        }else {
            holder.mItemPendingCb.setChecked(false);
        }
        holder.mItemPendingCb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (holder.mItemPendingCb.isChecked()){
                	mOnViewItemClickListener.onSelectClick((int) view.getTag());
                    if (!checkPositionlist.contains(holder.mItemPendingCb.getTag())){
                        checkPositionlist.add(new Integer(position));
                    }
                }else {
               		mOnViewItemClickListener.onDeleteClick((int) view.getTag());
                    if (checkPositionlist.contains(holder.mItemPendingCb.getTag())){
                        checkPositionlist.remove(new Integer(position));
                    }

                }
            }
        });
        SendOrderBean item = getItem(position);
        int flag = item.getFlag();
        int is_selected = item.getIs_selected();
        KLog.d("flag:   "+flag+"   is_selected:   "+is_selected+"   item.getId:   "+item.getOrder_sn());
        if (is_selected == 1){
            holder.mItemPendingCb.setSelected(true);
        }else {
            if (flag == 1){
                holder.mItemPendingCb.setChecked(true);
            }else {
                holder.mItemPendingCb.setSelected(false);
            }
        }
        holder.mDeliverOrderNumber.setText("订单号:"+item.getOrder_sn());
        setTextStyle(holder.mItemPendingTotal,"共",item.getSnum()+"","桶");
        holder.mItemPendingShopName.setText("水店名称:"+item.getSname());
        holder.mItemPendingAdress.setText("送至:"+item.getAddr());
        holder.mItemPendingRv.setLayoutManager(new LinearLayoutManager(mContext));
        holder.mItemPendingRv.setHasFixedSize(true);
        List<SendOrderBean.GoodsBean> goods = item.getGoods();
        PendingItemAdapter adapter = new PendingItemAdapter(mContext,goods);
        holder.mItemPendingRv.setAdapter(adapter);
    }

    private void setTextStyle(TextView text, String first, String content, String second) {
        SpannableString spanString = new SpannableString(first + content + second);
        spanString.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.color_ff3939)), first.length(), (content + first).length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//颜色
        spanString.setSpan(new AbsoluteSizeSpan(24, true), first.length(), (content + first).length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);//字体大小
        text.setText(spanString);
    }

    @Override
    public int getItemCount() {
        return (mData == null)?0:mData.size();
    }

    public void setData(ArrayList<SendOrderBean> data) {
        mData = data;
        notifyDataSetChanged();
    }

    public void addData(ArrayList<SendOrderBean> result) {
        mData.addAll(result);
        notifyDataSetChanged();
    }

    public SendOrderBean getItem(int position){
        SendOrderBean sendOrderBean = mData.get(position);
        return sendOrderBean;
    }

    public ArrayList<SendOrderBean> getData() {
        return mData;
    }

    public interface OnViewItemClickListener {
        void onSelectClick(int position);
        void onDeleteClick(int position);
    }

    public void setOnItemClickListener(OnViewItemClickListener listener) {
        mOnViewItemClickListener = listener;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.deliver_order_number)
        TextView mDeliverOrderNumber;
        @BindView(R.id.item_pending_total)
        TextView mItemPendingTotal;
        @BindView(R.id.item_pending_shop_name)
        TextView mItemPendingShopName;
        @BindView(R.id.item_pending_adress)
        TextView mItemPendingAdress;
        @BindView(R.id.item_pending_rv)
        RecyclerView mItemPendingRv;
        @BindView(R.id.item_pending_cb)
        CheckBox mItemPendingCb;
        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值