2017-02-28 14 views
-2

私はフラグメントレイアウトを使用してListViewに行を表示していますが、ListAdapterを使用してListViewを作成しています。各行にTextViewとRadioGroupが含まれ、各ラジオグループにはyesとnoの2つのRadioButtonが含まれています。Android - グループ内のラジオボタンを選択すると、別のグループの別のラジオボタンが選択されます。

問題は、アプリケーションを実行すると、最初のグループでRadioButton(はいのような)を選択すると、ListViewの別の行の別のグループで別のRadioButton(はい)が選択されます。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/questionTextView"> 

<TextView 
    android:text="Dis one na question wey go need yes or no answer?" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/questionView" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="19dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:textSize="20sp" /> 

<RadioGroup 
    android:layout_width="120dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/customRadioGroup" 
    android:layout_marginTop="16dp" 
    android:layout_below="@+id/questionView" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"> 

    <RadioButton 
     android:text="Yes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/yesRadioBtn" 
     android:layout_alignBaseline="@+id/noRadioBtn" 
     android:layout_alignBottom="@+id/noRadioBtn" 
     android:layout_toLeftOf="@+id/noRadioBtn" 
     android:layout_toStartOf="@+id/noRadioBtn" 
     android:layout_marginRight="15dp" 
     android:layout_marginEnd="15dp" /> 

    <RadioButton 
     android:text="No" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/noRadioBtn" 
     android:layout_below="@+id/questionsTitle" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_marginRight="16dp" 
     android:layout_marginEnd="16dp" /> 

</RadioGroup> 

そして、私のListAdapterクラス:あなたはViewを再利用している場合は、RadioGroupをリセットする必要が

public class MyCustomAdapter extends BaseAdapter implements ListAdapter { 

    private ArrayList<String> list = new ArrayList<String>(); 
    private Context context; 
    private String[] answers; 


    public MyCustomAdapter(ArrayList<String> list, Context context) { 
     this.list = list; 
     this.context = context; 
     this.answers = new String[list.size()]; 
    } 

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

    @Override 
    public Object getItem(int pos) { 
     return list.get(pos); 
    } 

    @Override 
    public long getItemId(int pos) { 
     //return list.get(pos).getId(); 
     //just return 0 if your list items do not have an Id variable. 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent)  { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.question_row, null); 
     } 

     //Handle TextView and display string from your list 
     TextView listItemText = (TextView)view.findViewById(R.id.questionView); 
     listItemText.setText(list.get(position)); 

     //Handle buttons and add onClickListeners 
     RadioGroup radioGroup = (RadioGroup)view.findViewById(R.id.customRadioGroup); 
     //radioGroup.setId(position); 
     View vYes = radioGroup.getChildAt(0); 
     View vNo = radioGroup.getChildAt(1); 

     RadioButton yesRadioBtn = (RadioButton)vYes;//(RadioButton)view.findViewById(R.id.yesRadioBtn); 
     RadioButton noRadioBtn = (RadioButton)vNo;//(RadioButton)view.findViewById(R.id.noRadioBtn); 

     yesRadioBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       answers[position] = "yes"; 
       notifyDataSetChanged(); 
      } 
     }); 
     noRadioBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       answers[position] = "no"; 
       notifyDataSetChanged(); 
      } 
     }); 

     return view; 
    } 

    public String[] getAnswers() 
    { 
     return this.answers; 
    } 
} 

答えて

0

(ここで

は、行のフラグメントのレイアウトコードです convertView != null)。以下の変更により、 RadioGroupは「選択なし」にリセットされますが、内部データ構造 answersに反映される値に設定する必要があります。

RadioGroup radioGroup = (RadioGroup)view.findViewById(R.id.customRadioGroup); 
if (convertView != null) { 
    radioGroup.clearCheck(); 
} 
関連する問題