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 的處理結束--------------
經過這麼處理後,顯示的答案是正確的,如果過往客官看到有更好的解決方法,麻煩給我留言。如果本方案對你有幫助,請點個讚唄!