Checkbox的RecyclerView单选,多选问题

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

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

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

    public ObjectAdapter(Context mContext, List<TopicHomeChoseDialogBean> 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的数据

参考链接://www.greatytc.com/p/ed550152010a

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容