单选按钮setChecked / setSelected不起作用

时间:2016-07-08 10:08:26

标签: android android-radiogroup

我有一个带有文本和3个单选按钮的列表视图。如果我选择任何单选按钮,并滚动列表,单选按钮将被取消选中。我正在维护选择了单选按钮的项目的ID,并在适配器Getview设置中选择所需的单选按钮。在调试时,它执行语句setChecked(true)但单选按钮仍未选中。我尝试setSelected(true)并通过广播组((RadioButton)holder.rg.getChildAt(2)).setChecked(true);进行设置,但似乎没有任何工作。

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无效。请指教。

3 个答案:

答案 0 :(得分:27)

尝试此操作,在设置单选按钮进行选中之前,请清除无线电组中的所有检查:

yourRadioGroup.clearCheck();
yourRadioButton.setChecked(true);

答案 1 :(得分:0)

这是ListView的预期行为,因为它为每个项重用View。考虑使用SparseBoolArray跟踪复选框选中状态。查看此链接:Getting the state of a checkbox inside of a listview

答案 2 :(得分:0)

我通过从适配器中的getView方法中删除if (convertView == null)和else部分来解决这个问题。

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