Checkbox的RecyclerView单选,多选问题

问题:recyclerview在每个item里面都有一个chekcbox,如果我有20个item,我选中的第一个item的checkbox,那么下面一定会有一个item会跟第一个item进行复用,其实这不仅仅是checkbox,你换成一个图标也一样的道理,选中和不选中依然会有这个问题

解决思路:
1,能不能不让条目复用?(违背了recyclerview的设计初衷,如果列表是固定的几条item可以用)
2,item选中状态是一种数据(true/false),能不能让数据不复用

public class ObjectAdapter extends BaseBindingAdapter {
    private Context mContext;
    List listInfo;
    //用来记录所有checkbox的状态
    private Map hashMap = new HashMap<>();

    public ObjectAdapter(Context mContext, List listInfo) {
        super(R.layout.item_home_chose_object_dialog);
        this.mContext = mContext;
        this.listInfo = listInfo;
        initMap(listInfo);
    }

    /**
     * 初始化map集合,将所有checkbox默认设置为false
     */
    private void initMap(List dataList) {
        if (!dataList.isEmpty()) {
            for (int i = 0; i < dataList.size(); i++) {
                hashMap.put(i, false);
            }
        }
    }

    @Override
    protected void bindView(BaseBindingHolder holder, TopicHomeChoseDialogBean info, ItemHomeChoseObjectDialogBinding binding, int position) {

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) binding.itemRl.getLayoutParams();
        int imageSize = (ScreenUtils.getScreenWidth() - SizeUtils.dp2px(120) - SizeUtils.dp2px(8)) / 3;
        params.width = imageSize;
        params.height = imageSize;
        binding.itemRl.setLayoutParams(params);
        binding.tvName.setText("次元" + position);

        if (info != null) {

            binding.itemRl.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (!hashMap.get(position)) {
                        hashMap.put(position, true);//每个position为唯一索引,进行存和取
//                        listInfo.get(position).setClicked(true);//设置数据没用错误
                        binding.checkImg.setImageResource(R.mipmap.object_dialog_img_checked);
                        onItemClickListener.onClick(position, true);
                    } else {
//                        listInfo.get(position).setClicked(false);
                        hashMap.put(position, false);//每个position为唯一索引,进行存和取
                        binding.checkImg.setImageResource(R.mipmap.report_check_default);
                        onItemClickListener.onClick(position, false);
                    }
                }
            });

            if (!hashMap.get(position)) {
                binding.checkImg.setImageResource(R.mipmap.report_check_default);
            } else {
                binding.checkImg.setImageResource(R.mipmap.object_dialog_img_checked);
            }
        }
    }

所有的item状态都用一个map集合存起来,
在页面加载时候,在适配器的构造函数中需要对map集合进行初始化(所有的checkbox默认选中是false)
当你点击checkbox的时候,我们去重新设置checkbox的状态,然后获取,这样就能够完美的解决复用问题了
然后再回调这个map的数据

参考链接:https://www.jianshu.com/p/ed550152010a

你可能感兴趣的:(Checkbox的RecyclerView单选,多选问题)