安卓开发listview中包含radiogroup选项在滚动时自动选中的解决方法。BaseAdapter,RadioGroup,ListView,ViewHolder

做类似于选择题的安卓开发,刚刚上手,小白一个,最初使用simpleadapter写的listview发觉是个中看不中用的东西,内部的复杂控件无法监听,网上找说继承自baseadapter的功能更加强大,功能更多,最出名的是converview可以带来listview优化,网上很多博客介绍了这些。

但正是由于这个listview回收机制,是的用户的原有选定项被原封不动地回收重新利用,我们要做的就是在初次选择后记住用户的选择内容,并在回收利用时根据列表项的列表号进行对号入座地回复。

具体处理方法:

0.每个列表项都是一个包含问题和选项及其get set方法的类(Listitem)的对象(listitem),并将其添加到LIst<Listitem>集合中。

1.先取消radiogroup的监听能力,使其不会记录下一步操作。

2.在显示列表项时(gettag()之后)检查列表项的状态,该状态由下一步设定,利用内部的get方法。

3.进行监听,对选项的点击操作会利用set方法存到listitem中。

关键代码:

holder.questions.setText(mList.get(position).getQuestion());
        //changeAnswers(position,holder);
        holder.radioGroup.setId(position);
        holder.radioGroup.setOnCheckedChangeListener(null);
        switch(mList.get(position).getAnswerId()){
                case 1:holder.radioGroup.check(R.id.rb1);break;
                case 2:holder.radioGroup.check(R.id.rb2);break;
                case 3:holder.radioGroup.check(R.id.rb3);break;
                case 4:holder.radioGroup.check(R.id.rb4);break;
                case 5:holder.radioGroup.check(R.id.rb5);break;
                default:holder.radioGroup.clearCheck();break;
            }
        holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                ListItem temp=mList.get(group.getId());
                switch (checkedId){
                    case R.id.rb1:temp.setAnswerId(1);
                        Toast.makeText(group.getContext(),"rb1 confirmed",Toast.LENGTH_SHORT).show(); break;
                    case R.id.rb2:temp.setAnswerId(2);break;
                    case R.id.rb3:temp.setAnswerId(3);break;
                    case R.id.rb4:temp.setAnswerId(4);break;
                    case R.id.rb5:temp.setAnswerId(5);break;
                    default:break;
                }
            }
        });
完整代码:https://github.com/hedefu999/CATest/tree/master/app/src/main/java/com/example/lsq/catest

刚刚搞好,凑合看吧代码有很多冗余,这只是我的项目中的一个难题。

有图有真相:


彩蛋:大家帮我看看这机子啥配置,敢这么玩


求资助大笑这人想mac想疯了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值