滚动 recyclerview 时突然取消选中所有单选按钮 (android kotlin)

all radio button suddenly unchecked when the recyclerview was scrolled (android kotlin)

我在 recyclerview 的每一行内制作了动态单选按钮列表,但是当我随机滚动所有单选按钮时,我使用模型来存储单选按钮条件,notifyItemChanged,首先初始化检查,使用布局而不是 radiogroup,并使用选择条件来检查特殊的单选按钮,但我无法解决这个问题

下面第一张图片所有单选按钮都被勾选

但是向下滚动和向上滚动时所有单选按钮都未选中

这是我在 recyclerview 中的项目布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayoutlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp">

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="2">

        <LinearLayout

            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/questionText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Sumber Data" />

        </LinearLayout>

        <LinearLayout

            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <CheckBox
                android:id="@+id/tidak_ada"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Tidak Ada" />


        </LinearLayout>

    </TableRow>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="2">

        <RadioGroup
            android:id="@+id/radiogroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical"/>

        <LinearLayout
            android:id="@+id/layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical"></LinearLayout>

    </LinearLayout>


</LinearLayout>

我在 onBindViewHolder

中创建适配器内部单选按钮的代码
var rprms = InputFieldHolder.radiogroup?.layoutParams
        if(rprms != null && question.pilihan_jawabans.count() > 0){
            InputFieldHolder.radiogroup?.removeAllViews()
            question.pilihan_jawabans.forEachIndexed {i,e->
                val rdbtn = RadioButton(context)
                rdbtn.id = question.pilihan_jawabans[i].id
                rdbtn.text = question.pilihan_jawabans[i].isi.toString()
                rprms = RadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
                InputFieldHolder.radiogroup?.addView(rdbtn, rprms)

                val size = InputFieldHolder.radiogroup?.childCount?.minus(1)

                if(question.pilihan_jawabans[i].checked){
                    for (x in 0..size!!) {
                        if((InputFieldHolder.radiogroup?.getChildAt(x) is RadioButton)){
                            if((InputFieldHolder.radiogroup?.getChildAt(x) as RadioButton).id != question.pilihan_jawabans[i].id){
                                (InputFieldHolder.radiogroup?.getChildAt(x) as RadioButton).setChecked(false)
                            }
                        }
                    }
                }

                rdbtn.setChecked(question.pilihan_jawabans[i].checked)
                rdbtn.setTag(Integer(question.pilihan_jawabans[i].id))

                rdbtn.setOnCheckedChangeListener({ group, checked ->
                    question.pilihan_jawabans.forEachIndexed {ii,ee->
                        if(checked){
                            question.pilihan_jawabans[ii].checked = false
                        }
                    }
                    question.pilihan_jawabans[i].checked = checked
                    notifyItemChanged(position)
                })
            }


        }

我的模型存储单选按钮选中状态

@Parcelize
class QuestionSelection(
    var id : Int,
    var isi : String,
    var keterangan : String,
    var checked : Boolean = false

) : Parcelable

注意: 我的单选按钮是动态的,所以不仅有 2 个选项,还有更多选项,具体取决于我从 API

中获取的数据

几个小时后解决,我终于明白是什么原因导致 problem.i 总是调用 InputFieldHolder.radiogroup?.removeAllViews() 销毁所有单选按钮并用新的 satet 制作新的单选按钮,但单选组总是保存以前单选按钮的状态销毁 所以最后我只是在销毁单选按钮后调用 InputFieldHolder.radiogroup?.clearCheck() 以清除单选组内的所有检查状态