为了账号安全,请及时绑定邮箱和手机立即绑定

RadioGroup 中的 RecyclerView 和 RadioButton

RadioGroup 中的 RecyclerView 和 RadioButton

胡子哥哥 2021-09-12 20:39:25
我有 RecyclerView,在 RowItem 布局中,我有 RadioGroup,其中有两个 RadioButton。如果我选择 First Item 并滚动到底部,第 8 个,第 16 个,...所以检查:| 怎么处理?tnx的答案..如果你需要任何信息..我把主题ques_item_row.xml <RadioGroup                    android:id="@+id/ques_radio_group"                    android:layout_width="match_parent"                    android:layout_height="wrap_content"                    android:layout_below="@+id/txt_ques_title"                    android:layout_gravity="end|center"                    android:gravity="start"                    android:orientation="vertical"                    android:textAlignment="textStart"                    android:textDirection="rtl">                    <android.support.v7.widget.AppCompatRadioButton                        android:id="@+id/first_ques"                        android:layout_width="match_parent"                        android:layout_height="wrap_content"                        android:layout_gravity="end|right"                        android:layout_margin="@dimen/quest_margin"                        android:gravity="end|right"                        android:checked="false"                        android:padding="@dimen/quest_padding"                        android:text="@{question.firstQuest}"                        android:textColor="@color/ques"                        android:textDirection="ltr"                        android:textSize="@dimen/text_ques"                        />                             </RadioGroup>
查看完整描述

2 回答

?
慕尼黑8549860

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}"


查看完整回答
反对 回复 2021-09-12
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

添加private int isFirstQuestionChecked = false到您的模型并在您选择此项时对其进行更改RadioButton。在您的适配器中显示正确的值RadioButton


if (element.isFirstQuestionChecked == true) {

    selectRadioButton()

} else {

    deselectRadioButton() // it's important!

}


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 307 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信