当我将其称为radiogroupId.clearCheck时,此方法将调用radiogroup click侦听器

问题描述

详细信息:我有2个带有一些单选按钮的单选组。

我想要的内容用户只能从2个组中选择一个单选按钮。

我做了什么:

 rgOne.setonCheckedchangelistener(RadioGroup.OnCheckedchangelistener { group,checkedId ->
            try {
                val checkedRadioButtonId: Int = rgOne.checkedRadioButtonId
                if (checkedRadioButtonId != null) {
                    oneItem = oneList[checkedRadioButtonId]
                    healthy = oneItem.code!!
                    AppGlobal.displayShortToast(
                        this,"You selected: " + oneItem.title
                    )
                    if (rgTwo.checkedRadioButtonId != -1) {
                       rgTwo.clearCheck()

                    }
                }
            } catch (e: Exception) {
                e.printstacktrace()
            }


        })

        
        rgTwo.setonCheckedchangelistener(RadioGroup.OnCheckedchangelistener { group,checkedId ->
            try {
                val checkedRadioButtonId: Int = rgTwo.checkedRadioButtonId
                if (checkedRadioButtonId != null) {
                    twoItem = twoList[checkedRadioButtonId]
                    unhealthy = twoItem.code!!
                    AppGlobal.displayShortToast(
                        this,"You selected: " + twoItem.title
                    )
                    if (rgOne.checkedRadioButtonId != -1) {
                     rgOne.clearCheck()

                    }
                }
            } catch (e: Exception) {
                e.printstacktrace()
            }

        })

面对问题::当我将其称为rgOne.clearCheck()或rgTwo.clearCheck()时,呼叫整个广播组单击监听器,然后取消选中我检查的内容。像选择nothig一样,可以完美地实现第一次使用。

代码有什么问题以及我需要更改的内容

解决方法

在Activity的onCreate()或Fragment的onCreateView()内部调用此行一次:

   rgOne.setOnCheckedChangeListener(onCheckedChangeListener)
   rgTwo.setOnCheckedChangeListener(onCheckedChangeListener)

声明此变量:

private val onCheckedChangeListener =  
    RadioGroup.OnCheckedChangeListener { group,checkedId ->
        if (group!!.id == R.id.rgOne) {
            try {
                AppLog.e("Call healthy")
                val checkedRadioButtonId: Int = rgOne.checkedRadioButtonId
                if (checkedRadioButtonId != null) {
              
                    if (rgTwo.checkedRadioButtonId != -1) {
                        resetRadioGroup(rgTwo)
                        
                    }


                }
            } catch (e: Exception) {
                e.printStackTrace()
            }

        } else {
            try {
                AppLog.e("Call Unhealthy")
                val checkedRadioButtonId: Int = rgTwo.checkedRadioButtonId
                if (checkedRadioButtonId != null) {
                   
                    if (rgOne.checkedRadioButtonId != -1) {
                        resetRadioGroup(rgOne)
                        
                    }


                }
            } catch (e: Exception) {
                e.printStackTrace()
            }

        }

    }

用于重置无线电组的功能:

fun resetRadioGroup(rgType: RadioGroup) {
    rgType.setOnCheckedChangeListener(null)
    rgType.clearCheck()
    rgType.setOnCheckedChangeListener(onCheckedChangeListener)
}

Reference link

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...