【问题标题】:How to handle onCheckedChangeListener in RadioGroup inside Recyclerview which is called while setting the state of the RadioGroup?如何处理在设置 RadioGroup 状态时调用的 Recyclerview 中 RadioGroup 中的 onCheckedChangeListener?
【发布时间】:2019-01-12 16:01:41
【问题描述】:

我正在尝试在 recyclerview 中添加带有 4 个 radiobuttonsradiogroup。我将状态保存在room 中,并将其放入适配器以设置适当的单选按钮。在执行此操作时,我在onBindViewHolder 中使用radiogroup.check()radiogroup.clearchek() 方法,然后每当我们滚动recyclerview 时这将自动调用radiogroup.setOnCheckedChangeListener。我的代码是这样的

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        question = quesions[position]
        qTitle = question.question!!
        holder.textTestQuestion.text = "" + (number + position) + " " + question.question;
        holder.answerFirst.text = "a. " + question.answers?.get(0).toString()
        holder.answerSecond.text = "b. " + question.answers?.get(1).toString()
        holder.answerThird.text = "c. " + question.answers?.get(2).toString()
        holder.answerFourth.text = "d. " + question.answers?.get(3).toString()

        holder.radio_group.setTag(position)

        if (question.rightAnswer != null) {
            holder.radio_group.check(question.rightAnswer!!)
        } else {
            holder.radio_group.clearCheck()
        }

        holder.radio_group.setOnCheckedChangeListener(object : RadioGroup.OnCheckedChangeListener {
            override fun onCheckedChanged(group: RadioGroup?, checkedId: Int) {
                        val pos = group?.getTag() as Int
                        val ques = quesions[pos]
                        val chid = group.checkedRadioButtonId

                        ques.rightAnswer = checkedId
                        ques.answered = true
                       Observable.just(question).subscribeOn(Schedulers.io()).subscribe { t: Question? ->
                            qnADao.saveQuestion(ques)

                        }

            }

        })

    }

我已经在 stackoverflow 上尝试了所有解决方案,例如在 radiogroup.checkedRadioButtonId 中检查 -1,然后在 radiogroup.isPressed 中也没有什么对我有用。所以任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: android kotlin android-radiobutton android-radiogroup


    【解决方案1】:

    使用onClickListener 代替setOnCheckedChangeListener 是一种解决方案。但是,如果你以后在bind() 中执行view.performClick(),那么这种情况会再次发生。

    即使在视图离开屏幕并重新循环到新行之后,您为视图设置的侦听器仍然处于活动状态。

    向上滚动时,离开屏幕的视图由 RecyclerView 获取并将其附加到底部行并交给您以将其与新数据绑定。此视图中仍然附加了该事件侦听器。当你调用holder.radio_group.check()这行时,之前附加的监听器就会执行。

    您可以先移除监听器,然后选中/取消选中radiogroup,然后将新的事件监听器设置为radiogroup。在你的代码中,像这样:

    holder.radio_group.setOnCheckedChangeListener(null)    // <----- This line added.
    
    if(question.rightAnswer != null) {
        holder.radio_group.check(question.rightAnswer!!)
    } else {
        holder.radio_group.clearCheck()
    }
    
    holder.radio_group.setOnCheckedChangeListener(object : RadioGroup.OnCheckedChangeListener { ..... })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2012-03-12
      • 2023-03-07
      • 2016-05-15
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多