-1

當我運行我的應用程序,我得到更多的單選按鈕比我需要。似乎這些單選按鈕在同一組中重複出現。我真的不明白髮生了什麼事。這是我的自定義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; 

    } 

回答

0

最後經過一些黑客我解決了它!我刪除了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)); 

     } 

    }