Android RecyclerView+RadioButton 单选列表,选择/勾选错乱问题

先上效果图

实现效果如图所示

由于Recyclerview的复用机制,RadioButton 选择会出现错误,实现的代码如下:主要是Adapter的实现(Adapter使用的BaseRecyclerAdapter开源封装库)

其他方法就不贴了,主要看数据绑定这里

//用来记录每个选项单选结果,记录的结果是这样的{0=1,1=3,2=4.....}

public static SparseIntArraysia =new SparseIntArray();

public static SparseIntArraygetSia() {

        return sia;

}

-----------------------------------------------------------------------------------------------------------

@Override // soft.wl.textureviewcamera.base.BaseRecyclerAdapter

public void bindData(RecyclerViewHolder holder, int position, DataBean item) {

radioA对应你自己的findviewbyid方法

    radioA.setText("A." + item.optionA);

    radioB.setText("B." + item.optionB);

    radioC.setText("C." + item.optionC);

    radioD.setText("D." + item.optionD);

    radioA.setOnCheckedChangeListener((buttonView, isChecked) -> {

        //这个判断防止在滑动过程中会触发里面的方法

        if (!holder.radioA.isPressed()) {

            return;

        }

        if (isChecked) {

            sia.append(holder.getAdapterPosition(), 1);

        }

    });

    radioB.setOnCheckedChangeListener((buttonView, isChecked) -> {

        //这个判断防止在滑动过程中会触发里面的方法

        if (!holder.radioB.isPressed()) {

            return;

        }

        if (isChecked) {

            sia.append(holder.getAdapterPosition(), 2);

        }

    });

    后面的C和D同理,复制粘贴就行

    //这里默认选中位置为-1,代表未选中

    int i =sia.get(holder.getAdapterPosition(), -1);

    switch (i) {

        case 1:

           radioA.setChecked(true);

            break;

        case 2:

            radioB.setChecked(true);

            break;

        case 3:

            radioC.setChecked(true);

            break;

        case 4:

            radioD.setChecked(true);

            break;

        case -1:

            radioGroup.clearCheck();

            break;

        default:

            break;

        }

    }

最后遍历SparseIntArraysia 即可

private void submitAnswers() {

        SparseIntArray sia = BaseRecyclerAdapter.getSia();

        if (sia.size() <20) {

            ToastUtils.showLong("请完成所有题目");

            return;

        }

        if (sia.size() ==20) {

            for (int i =0; i < sia.size(); i++){

                int key = sia.keyAt(i);

                int value = sia.get(key);

                //执行你自己的方法

            }

        }    

        //最后执行完可以清除下sia

        sia.clear();

}

喜欢或者帮助到你的话,可以点赞支持下,需要源码加关注私聊我领取,感谢支持

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值