为了使ViewHolder单独处理每个单选按钮,而不重复使用以前单选按钮的状态,我将单选按钮项是否被选中的状态存储在布尔值列表中,并根据该列表设置单选按钮状态.但是,当我向下和向上滚动时,被切换的单选按钮会被随机取消切换,即使isCheckedList包含每个单选按钮的正确布尔信息(我用logd()打印列表,以验证它是否实际存储了状态)

知道我错过了什么吗?

class QuestionAdapter(context: Context) :
    RecyclerView.Adapter<QuestionAdapter.QuestionViewHolder>() {

    private val listOfQuestion: List<String>
    private val listSize = 20
    private val isCheckedList: MutableList<Boolean> = MutableList(listSize) { false }

   //Initialize a list of 20 questions. 
    init {
        val allQuestions = context.resources.getStringArray(R.array.questions).toList()

        listOfQuestion = allQuestions
            .shuffled()
            .take(listSize)
    }

    class QuestionViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
        val questionText = view.findViewById<TextView>(R.id.question)
        val radioButton = view.findViewById<RadioButton>(R.id.yes)
       
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuestionViewHolder {
        val layout = LayoutInflater
            .from(parent.context)
            .inflate(R.layout.item_view, parent, false)
        return QuestionViewHolder(layout)
    }

    override fun onBindViewHolder(holder: QuestionViewHolder, position: Int) {

        val item = listOfQuestion[position]
        holder.questionText.text = item

        holder.radioButton.isChecked = isCheckedList[position]
        holder.radioButton.setOnCheckedChangeListener { _, isChecked ->
                isCheckedList[holder.adapterPosition] = isChecked
                Log.d("Adapter", "list: $isCheckedList ")
        }
    }
    
    override fun getItemCount(): Int {
        return listOfQuestion.size
    }


}

推荐答案

在设置正确的值之前,需要清除单选按钮上的选项.

holder.radioGroup.clearCheck()

通过这种方式,RadioGroup清除其 Select ,准备接收一个输入,该输入将触发正确的RadioButton判断.

但你需要意识到,这可能会给你的onCheckedChanged位听众带来意想不到的结果.但由此产生的问题还有一个解决办法.

// Nullify listener
holder.radioGroup.setOnCheckedChangeListener(null);

// Clear selection
holder.radioGroup.clearCheck();

// Reset listener after selection has been cleared
holder.radioGroup.setOnCheckedChangeListener(checkedChangeListener);

Android相关问答推荐

未解析的引用:背景 colored颜色

Android:MethodHandle. invoke和MethodHandle. invokeExact仅从Android O( - min—api 26)开始支持

合成 colored颜色 的GSON反序列化

如何从Android 12的来电中获取电话号码?

strings.xml中字符串数组中的占位符

无法将非静态方法与Frida挂钩

Android App Google AdMob";广告加载失败:3;带有测试ID,&q;广告加载失败:1 for My Gahad

Android-LVL库始终返回NOT_SUBLISTED

在Jetpack Compose中实现焦点突出的最佳方式?

如何解决Gradle构建错误:java.lang.NoSuchMethodError

如何将.txtassets资源 转换为ArrayList<;字符串>;kotlin格式?

使用lazyColumn迁移paging3的旧代码

可组合函数无限地从视图模型获取值

Android Jetpack Compose全宽度抽屉优化

将 React Native 应用程序背景带到前台

Material 3 中的 ModalBottomSheet 用于 compose

Jetpack Compose 动画性能问题

Android 自动分页如何与 media3 配合使用?

如何在 react native 应用程序中显示复选框?当它在 android 模拟器中可见时

如何在 Compose 中更改高程 colored颜色 ?