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 的处理结束--------------

经过这么处理后,显示的答案是正确的,如果过往客官看到有更好的解决方法,麻烦给我留言。如果本方案对你有帮助,请点个赞呗!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值