2016-07-08 15 views
2

私はテキストと3つのラジオボタンを持つリストビューを持っています。ラジオボタンを選択してリストをスクロールすると、ラジオボタンが選択されなくなります。私はラジオボタンが選択されている項目のIDを維持しており、アダプタのGetviewで必要なラジオボタンを選択するように設定しています。デバッグでは、文setChecked(true)を実行していますが、ラジオボタンはまだチェックされていません。私はsetSelected(true)ラジオグループ((RadioButton)holder.rg.getChildAt(2)).setChecked(true);を介して設定しようとしましたが、何も動作していないようです。ラジオボタンsetChecked/setSelectedが機能しない

XML:

<TextView 
     android:id="@+id/refill_product_name" 
     android:layout_width="0dp" 
     android:layout_weight="0.5" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:text="@string/hello_world" 
     android:textColor="@android:color/black" 
     android:textStyle="normal" 
     android:textSize="@dimen/item_sub_heading" 
     android:layout_marginLeft="@dimen/activity_horizontal_margin" 
     android:layout_marginStart="@dimen/activity_horizontal_margin"/> 

    <RadioGroup 
     android:id="@+id/refill_product_rg" 
     android:layout_width="0dp" 
     android:layout_weight="0.5" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

     <RadioButton 
      android:id="@+id/refill_product_regular" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/regular" 
      android:textColor="@android:color/black" 
      android:textStyle="bold" 
      android:buttonTint="@color/primary"/> 

     <RadioButton 
      android:id="@+id/refill_product_small" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/small" 
      android:textColor="@android:color/black" 
      android:textStyle="bold" 
      android:layout_marginLeft="@dimen/radio_btn_margin" 
      android:buttonTint="@color/primary"/> 

     <RadioButton 
      android:id="@+id/refill_product_extra_small" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/extra_small" 
      android:textColor="@android:color/black" 
      android:textStyle="bold" 
      android:layout_marginLeft="@dimen/radio_btn_margin" 
      android:buttonTint="@color/primary"/> 

    </RadioGroup> 

アダプターコード:アダプタで

private class ViewHolder { 
     TextView productName; 
     RadioButton regularBtn, smallBtn, extraSmallBtn; 
     RadioGroup rg; 
    } 

getViewメソッドメソッド

holder.rg.clearCheck(); 
if (mAppSession.getSelRefillProducts() != null) { 
    for (RefillProduct pr : mAppSession.getSelRefillProducts()) { 
     if (pr.getProductId() == rf.getProductId()) { 
      if (pr.getSize().equals("R")) { 
       ((RadioButton)holder.rg.getChildAt(0)).setChecked(true); 
      } else if (pr.getSize().equals("S")) { 
       holder.smallBtn.setSelected(true); 
      } else if (pr.getSize().equals("XS")) { 
       ((RadioButton)holder.rg.getChildAt(2)).setChecked(true); 
      } 
      } 
     } 
     } 

私は私が何かをしないのですかどうかわからないけど、setCheckedたりするsetSelectedではありませんワーキング。お知らせ下さい。

+1

'setSelected'は**完全**何か他のものです。それが動作することを期待しないでください。さて、 'setChecked'がなぜ機能しないのかを見てみましょう。 'android:clickable =" true "'をラジオボタンに追加して、違いがあるかどうか確認してください。 – Vucko

+0

推奨どおりに試してみてください。しかし、期待どおり、違いはありません。実際には、選択されたラジオボタンがチェックされず、ラジオボタンがチェックされていないので、リサイクルビューの問題ではないようです。 – Gaurav

+0

すべてのアイテムのラジオボタンを単一のメソッドでループすることはできません。単一の 'holder'オブジェクトを使用します。すべてのラジオボタンではなく、1つのラジオボタンだけをチェックします** –

答えて

0

各アイテムのビューを再利用するので、ListViewの動作は期待されています。 SparseBoolArrayを使用してチェックボックスの状態を追跡することを検討してください。 Getting the state of a checkbox inside of a listview

+0

答えをありがとう。私はこの動作を理解し、アイテムIDと対応するオプションでリストを維持しています。私のGetViewメソッドで、私は自分のリストで各項目をチェックしていて、ラジオボタンをチェックしているかどうかをチェックしています。デバッグでは、ステートメントsetChecked(true)を実行してもまだ動作しません。 – Gaurav

0

アダプタのgetViewメソッドからif (convertView == null)とelse部分を削除して解決しました。

else { 
holder = (ViewHolder) convertView.getTag(); 
10

ラジオグループにチェックインし、明確なすべてのチェックにあるラジオボタンを設定する前に、これを試してみてください:

yourRadioGroup.clearCheck(); 
yourRadioButton.setChecked(true); 
関連する問題