使用Listview中的RadioGroup滚动问题?

时间:2016-04-23 12:48:36

标签: android

在我的活动中包含列表视图。 Listview行在RadioGroup中包含一个Textview和三个Radiobutton。当我在十(10)行之后滚动listView之后在第一行中选择第一个radiobutton时,会自动选择第一个单选按钮出现。这会发生在每十(10)行后我不知道怎么回事?

CustomAdapter类

public class StudentAttendanceCustomAdapter extends BaseAdapter{

    private Activity activity;
    private LayoutInflater inflater;
    private List<StudentDataReader> studentRecord;
    private List<StudentDataReader> mOriginalValues;
    public HashMap<String, String> radioMap;
    private int mSelectedPosition = -1, radioButtonId;

    public StudentAttendanceCustomAdapter(TeacherAttendanceActivity activity, List<StudentDataReader> studentList) {

        this.activity = activity;
        this.studentRecord = studentList;
        this.mOriginalValues = studentList;
    }

    @Override
    public int getCount() {
        return studentRecord.size();
    }

    @Override
    public Object getItem(int position) {
        return studentRecord.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    static class ViewHolder{
        TextView studentName;
        RadioButton rb_p;
        RadioButton rb_a;
        RadioButton rb_l;
        RadioGroup rg;

    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder hoder = new ViewHolder();
        if (inflater == null)
        {
            inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        if(convertView == null){
            convertView = inflater.inflate(R.layout.teacher_attendance_row,parent,false);

            hoder.studentName = (TextView)convertView.findViewById(R.id.tv_attendance_studentName);
            hoder.rg = (RadioGroup)convertView.findViewById(R.id.rg_1);
            hoder.rb_p = (RadioButton)convertView.findViewById(R.id.radioButton_present);
            hoder.rb_a = (RadioButton)convertView.findViewById(R.id.radioButton_absent);
            hoder.rb_l = (RadioButton)convertView.findViewById(R.id.radioButton_leave);
            convertView.setTag(hoder);
        }else {
            hoder = (ViewHolder)convertView.getTag();
        }

        final String str_studentId,str_studentName;
        final StudentDataReader s = studentRecord.get(position);
        hoder.studentName.setText(s.getStudentName());
        str_studentId= s.getStudentId();
        str_studentName = s.getStudentName();


        hoder.rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                int childCount = group.getChildCount();

                for (int i = 0; i < childCount; i++) {
                    RadioButton radioButton = (RadioButton) group.getChildAt(i);

                    if (radioButton.getId() == checkedId) {
                        s.setPresent(radioButton.getText().toString());
                        notifyDataSetChanged();
                    }
                }
            }
        });

        return convertView;
    }
}

请任何人提前帮助我。

1 个答案:

答案 0 :(得分:0)

您的观看者将保持观看状态。对于每个项目,您必须将数据和数组保存在适配器中或放入项目对象数据。