弄乱了 ArrayAdapter 中的动态单选按钮

messed up dynamic radio buttons in ArrayAdapter

当我 运行 我的应用程序时,我得到的单选按钮比我需要的多得多。似乎单选按钮在同一组中重复出现。我真的不明白发生了什么。这是我的自定义 ArrayAdapter。我想知道这里的问题

public class QuestionsListAdapter extends ArrayAdapter<QuestionProperties> {


List<QuestionProperties> list;



Context test;



public QuestionsListAdapter(Context context,  int resource, List<QuestionProperties> list2) {
    super(context,resource,list2);
    test = context;
    list =list2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;

    final RadioButton[] rB;
     RadioHolder  holder = new RadioHolder();
    view= convertView;

    LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            RadioGroup.LayoutParams.WRAP_CONTENT,
            RadioGroup.LayoutParams.WRAP_CONTENT);

        if(view == null)
        {
            LayoutInflater inflator = ((Activity) test).getLayoutInflater();
           view = inflator.inflate(R.layout.question_list_row, null);


            holder.questionTV = (TextView) view.findViewById(R.id.qTextView);
            holder.radiogroup = (RadioGroup) view.findViewById(R.id.radio_group);
            view.setTag(holder);

        }
        else{
            //view = convertView;
            holder = (RadioHolder) view.getTag();
            }



        holder.questionTV.setText(String.valueOf(list.get(position).getQuestionNo())+"."+" " + list.get(position).getQuestion());

        rB=new RadioButton[list.get(position).possibleAns.length];

        for(int count = 0; count<(list.get(position).possibleAns.length);count++)
        {
             rB[count]= new RadioButton(test);

            rB[count].setId(count);
            rB[count].setText(list.get(position).possibleAns[count]);
            layoutParams.weight=1.0f;
            layoutParams.setMargins(15, 0, 5, 10);
            rB[count].setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {

                    String a = String.valueOf(v.getId());
                    Toast.makeText(QActivity.context, "Radio Button "+ a,Toast.LENGTH_SHORT).show();    
                  }
            });
            holder.radiogroup.addView(rB[count],layoutParams);  

        }
        return view;
}



  static class RadioHolder {
        protected TextView questionTV;
        protected RadioGroup radiogroup;

    }

经过一些技巧,我终于解决了它!我删除了 else 子句中的所有单选按钮。 解决方案..

public class QuestionsListAdapter extends ArrayAdapter<QuestionProperties> {


List<QuestionProperties> list;

RadioButton rB;

Context test;

RadioHolder  holder;

String chkBtn;

LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
        RadioGroup.LayoutParams.WRAP_CONTENT,
        RadioGroup.LayoutParams.WRAP_CONTENT);




public QuestionsListAdapter(Context context,  int resource, List<QuestionProperties> list2) {
    super(context,resource,list2);
    test = context;
    list =list2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;


     holder = new RadioHolder();
    view= convertView;
    Log.v("ConvertView", String.valueOf(position));



        if(view == null)
        {
            LayoutInflater inflator = ((Activity) test).getLayoutInflater();
           view = inflator.inflate(R.layout.question_list_row, parent,false);

           holder.questionTV = (TextView) view.findViewById(R.id.qTextView);
            holder.radiogroup = (RadioGroup) view.findViewById(R.id.radio_group);



            //holder.radiogroup.check(list.get(position).getSelectedAns());

            view.setTag(holder);
             //((RadioHolder) view.getTag()).radiogroup.setTag(list.get(position));
            Log.v("holder setTag", String.valueOf(position));



        }
        else{
            view = convertView;
             holder = (RadioHolder)view.getTag();
            //((RadioHolder)view.getTag()).radiogroup.getTag();

            holder.radiogroup.removeAllViews();


        }



        holder.questionTV.setText(String.valueOf(list.get(position).getQuestionNo())+"."+" " + list.get(position).getQuestion());
        configureRadioButtons(position);
        chkBtn = String.valueOf(list.get(position).getSelectedAns());
        holder.radiogroup.check(Integer.valueOf(chkBtn));


        return view;
}



  static class RadioHolder {
        protected TextView questionTV;
        protected RadioGroup radiogroup;

    }


    public void configureRadioButtons(int pos){

        final int position = pos;
        //rB=new RadioButton(test);

        for(int count = 0; count<(list.get(position).possibleAns.length);count++)
        {
             rB= new RadioButton(test);

            rB.setId(count);
            rB.setText(list.get(position).possibleAns[count]);
            layoutParams.weight=1.0f;
            layoutParams.setMargins(15, 0, 5, 10);
            holder.radiogroup.addView(rB,layoutParams); 

            rB.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View v) {
                            String a = String.valueOf(v.getId());
                            list.get(position).setSelectedAns(v.getId());
                        chkBtn =    String.valueOf(list.get(position).getSelectedAns());

                            Toast.makeText(QActivity.context, "Radio Button "+ a,Toast.LENGTH_SHORT).show();    

                        }           
            });

            rB.setOnCheckedChangeListener(new OnCheckedChangeListener(){

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {


                }

            });

            holder.radiogroup.clearCheck();
            Log.v("rB added to radiogroup", String.valueOf(position));

        }

    }