【问题标题】:Whne i call this radiogroupId.clearCheck() this method recall radiogroup click listener当我调用这个 radiogroup.clearCheck() 这个方法调用 radiogroup 点击监听器
【发布时间】:2021-02-16 20:45:41
【问题描述】:

详细信息:我有 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 时一样。

这段代码有什么问题,我需要改变什么。

【问题讨论】:

    标签: android kotlin radio-button android-radiobutton android-radiogroup


    【解决方案1】:

    在 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

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多