Android ListView 中嵌套 RadioGroup 滑动时出现错乱。在选中了某一个答案后,上下滑动ListView,发现没有做选择的radioButton也被选中了!这。。。。
如上图,我只选中了第一个,滑动几下后第二个,第三个也被选中了。几经查找资料,这是由于 ViewHolder 复用引发的问题。
最终的解决方案如下(注:这答案是固定的,也就是说各RadioButton都是写死在xml文件的,动态添加的稍后研究):
//---RadioGroup 的处理开始------------------------------
//1.先取消对其监听
h1.rg.setOnCheckedChangeListener(null);
//2.先清空所有选项
h1.rg.clearCheck();
//3.根据选择情况显示选择答案
switch (list.get(position).getCheckedNum()) {
case 1:
h1.rg.check(R.id.r_1);
break;
case 2:
h1.rg.check(R.id.r_2);
break;
case 3:
h1.rg.check(R.id.r_3);
break;
case 4:
h1.rg.check(R.id.r_4);
break;
default:
break;
}
//4.重新注册监听
h1.rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int p=0;
switch (checkedId){
case R.id.r_1:
p=1;
break;
case R.id.r_2:
p=2;
break;
case R.id.r_3:
p=3;
break;
case R.id.r_4:
p=4;
break;
}
//把选择了的答案记录回到ListView的集合中,以便滑动时给对应的RadioGroup赋值
list.get(position).setCheckedNum(p);
//测试选择答案正确性
for(Title title:list){
if(title.getCheckedNum()>0)
Log.e("TAG",title.getTITLE()+"---"+title.getCheckedNum());
}
}
});
//--------RadioGroup 的处理结束--------------
经过这么处理后,显示的答案是正确的,如果过往客官看到有更好的解决方法,麻烦给我留言。如果本方案对你有帮助,请点个赞呗!