2 回答
TA贡献1818条经验 获得超11个赞
您必须将选定的单选按钮 ID 保留到您的模型中。
1> 在你的模型中选择 selectedId。
class Model{
int selctedId;
// getter setter
}
2> 将此 ID 附加到您的无线电组。
@Override
public void onBindViewHolder(final CoachListViewHolder holder, final int position) {
Model model = list.get(position);
holder.radioGroup.check(model.getSelectedId);
holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
model.setSelectedId(checkedId);
}
});
在这个解决方案中,我们在模型中保存了选定的 id,我们将此字段附加到无线电组中 radioGroup.check(model.getSelectedId);
原因
当您不保留所选值时,它会在用户滚动位置时被回收。
我也发现了一个相关的问题。
久经考验的解决方案
您正在使用数据绑定,因此上述解决方案可以更短。使用双向绑定来保存选定的 id。
项目.java
public class Item extends BaseObservable{
private int selectedId;
public int getSelectedId() {
return selectedId;
}
public void setSelectedId(int selectedId) {
this.selectedId = selectedId;
}
}
行列表.xml
<data>
<variable
name="item"
type="com.innovanathinklabs.sample.ui2.Item"/>
</data>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:background="@color/colorPrimary"
android:checkedButton="@={item.selectedId}"
>
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/rbMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="male"/>
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/rbFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="female"/>
</RadioGroup>
现在,当您需要获取所选项目时。然后这样做。
if(list.get(1).getSelectedId() == R.id.rbMale){
// male is selected
}
else if (list.get(1).getSelectedId() == R.id.rbMale){
// female is selcted
}
同时从 Radio 组和 Radio 按钮中删除任何其他不必要的逻辑。
数据绑定魔法是
此代码转换为 android:checkedButton="@={item.selectedId}"
TA贡献2021条经验 获得超8个赞
添加private int isFirstQuestionChecked = false到您的模型并在您选择此项时对其进行更改RadioButton。在您的适配器中显示正确的值RadioButton
if (element.isFirstQuestionChecked == true) {
selectRadioButton()
} else {
deselectRadioButton() // it's important!
}
添加回答
举报