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

来源:互联网 发布:mysql语句书写顺序 编辑:程序博客网 时间:2024/04/30 13:57

做类似于选择题的安卓开发,刚刚上手,小白一个,最初使用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想疯了

0 0
原创粉丝点击