Android ListView 嵌套RadioGroup 滑動時出現錯亂

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 的處理結束--------------

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章