先上效果图

实现效果如图所示
由于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();
}
喜欢或者帮助到你的话,可以点赞支持下,需要源码加关注私聊我领取,感谢支持

3780

被折叠的 条评论
为什么被折叠?



