我有一个带有文本和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无效。请指教。
答案 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();