RecyclerView 复用出现 CheckBox 或者 设置背景混乱问题

来源:互联网 发布:js confirm 重写 编辑:程序博客网 时间:2024/05/19 03:46

RecyclerView 复用出现 CheckBox 或者 设置背景混乱问题


由于RecyclerView 与ListView 都使用了复用技术,所以会出现滚动后出现CheckBox选中混乱或者是Item的背景混乱问题。在OnBindViewHolder(...)方法中添加

public class MyShopingCartAdapter extends RecyclerView.Adapter<MyShopingCartAdapter.ViewHoder> {    private List<ShopingCart> list;    private OnItemListener listener;    private Context context;    private List<Integer> listCb = new ArrayList<>();//用于记录位置    public void setOnItemListener(OnItemListener onItemListener) {        this.listener = onItemListener;    }    public MyShopingCartAdapter(List<ShopingCart> list, Context context) {        this.list = list;        Fresco.initialize(context);    }    @Override    public ViewHoder onCreateViewHolder(ViewGroup parent, int viewType) {        ViewHoder viewHoder = new ViewHoder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_shoping_cart, parent, false));        return viewHoder;    }    @Override    public void onBindViewHolder(final ViewHoder holder, final int position) {        holder.tvTitle.setText(list.get(position).getTitle());        MyFresco.myDownload(holder.imgItem, list.get(position).getImgItem());        holder.tvHorses.setText(list.get(position).getHorses());        holder.tvModel.setText(list.get(position).getModel());        holder.tvPrice.setText(list.get(position).getPrice());        holder.edNumber.setText(list.get(position).getNumber());
/*
在这里进行选中操作
*/        holder.cbShoping.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                if (isChecked) {                    if (!listCb.contains(holder.cbShoping.getTag())) {                        listCb.add(position);//选中时添加                    }                } else {                    if (listCb.contains(holder.cbShoping.getTag())) {                        listCb.remove(position);//没选中时移除                    }                }            }        });
/*
初始判断
*/        if (listCb != null) {            holder.cbShoping.setChecked(listCb.contains(position) ? true : false);        } else {            holder.cbShoping.setChecked(false);        }    }    @Override    public int getItemCount() {        return list.size();    }    public class ViewHoder extends RecyclerView.ViewHolder {        private TextView tvTitle;        private CheckBox cbShoping;        private SimpleDraweeView imgItem;        private TextView tvHorses, tvModel, tvPrice;        private EditText edNumber;        private RelativeLayout rlReduce, rlPlus;        public ViewHoder(View itemView) {            super(itemView);            tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);            cbShoping = (CheckBox) itemView.findViewById(R.id.cbShoping);            imgItem = (SimpleDraweeView) itemView.findViewById(R.id.imgItem);            tvHorses = (TextView) itemView.findViewById(R.id.tvHorses);            tvModel = (TextView) itemView.findViewById(R.id.tvModel);            tvPrice = (TextView) itemView.findViewById(R.id.tvPrice);            edNumber = (EditText) itemView.findViewById(R.id.edNumber);            rlPlus = (RelativeLayout) itemView.findViewById(R.id.rlPlus);            rlReduce = (RelativeLayout) itemView.findViewById(R.id.rlReduce);            itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if (listener != null) {                        listener.onClick(v, getLayoutPosition(), list.get(getLayoutPosition()));                    }                }            });        }    }    public interface OnItemListener {        void onClick(View v, int pos, ShopingCart shopingCart);    }}



     通过一个List来辅助保存CheckBox的选中状态,把选中的checkBox的position放到List中,在初始化CheckBox的时候来重新设置checkBox的选中状态。在checkBox的CheckedChangedListener 来添加 或者删除 List中保存的选中状态。

0 0
原创粉丝点击