当前位置: 首页 > 知识库问答 >
问题:

带有两列静态编程语言的RadioGroup

葛昕
2023-03-14

我有两个单选组(组1和组2),分别包含3个单选按钮。我用这个准则把左右两列分开,各占一半。由于两个无线组是分开的,当用户单击组1时,我希望清除组2中的选定项(如果有)。任何想法都可以做到,因为我是由Kotlin编写的,所以我在stackoverflow ConstraintLayout、RadioGroup和RadioButton RadioGroup的两列中找到了一些示例,其中两列有十个单选按钮,因为该示例是用JAVA编写的,但我无法在Kotlin代码中应用。我是Kotlin和Java的新手,我正在使用Android Studio的“导航抽屉活动”,并将代码应用到“Fragment.kt”中,有人对此有想法吗?谢谢

这是我在MainA中的静态编程语言编码ctivity.ktval val listener2--

package com.example.pain_testing

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.RadioGroup
import android.util.Log


class MainActivity : AppCompatActivity() {

val rg1 = findViewById(R.id.radioGroup1) as RadioGroup
val rg2 = findViewById(R.id.radioGroup2) as RadioGroup

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    rg1.clearCheck(); // this is so we can start fresh, with no selection on both RadioGroups
    rg2.clearCheck();
    rg1.setOnCheckedChangeListener(listener1); //apply onCheckChangeListener
    rg2.setOnCheckedChangeListener(listener2);
}

private val listener1 = object : RadioGroup.OnCheckedChangeListener {

    override fun onCheckedChanged(group: RadioGroup, checkedId: Int) {
        if (checkedId != -1) {
            rg2.setOnCheckedChangeListener(null) // remove the listener before clearing so we don't throw that stackoverflow exception(like Vladimir Volodin pointed out)
            rg2.clearCheck() // clear the second RadioGroup!
            rg2.setOnCheckedChangeListener(listener2) //reset the listener
            Log.e("XXX2", "do the work")
        }
    }
}

private val listener2 = object : RadioGroup.OnCheckedChangeListener {

    override fun onCheckedChanged(group: RadioGroup, checkedId: Int) {
        if (checkedId != -1) {
            rg1.setOnCheckedChangeListener(null)
            rg1.clearCheck()
            rg1.setOnCheckedChangeListener(listener1)
            Log.e("XXX2", "do the work")
        }
    }
}

}

共有3个答案

太叔昊苍
2023-03-14
private lateinit var radioGroup1: RadioGroup
private lateinit var radioGroup2: RadioGroup
private var radioGroupBlock: Boolean = false

    ...

    radioGroup1 = view.findViewById(R.id.radioGroup_1)
    radioGroup2 = view.findViewById(R.id.radioGroup_2)

    ...

    radioGroup1.setOnCheckedChangeListener({ group, checkedId ->
        if (radioGroupBlock)
            return@setOnCheckedChangeListener
        val radio: RadioButton = view.findViewById(checkedId)
        toast(" On checked change : ${radio.text}")
        var id: Int = radioGroup2.checkedRadioButtonId
        if (id!=-1){
            radioGroupBlock = true
            radioGroup2.clearCheck()
            radioGroupBlock = false
        }
    })

    radioGroup2.setOnCheckedChangeListener({ group, checkedId ->
        if (radioGroupBlock)
            return@setOnCheckedChangeListener
        val radio: RadioButton = view.findViewById(checkedId)
        toast(" On checked change : ${radio.text}")
        var id: Int = radioGroup1.checkedRadioButtonId
        if (id!=-1){
            radioGroupBlock = true
            radioGroup1.clearCheck()
            radioGroupBlock = false
        }

    })
章乐逸
2023-03-14

您可以执行以下操作:

首先初始化两个无线电组,如下所示:

val rg1 = findViewById(R.id.radioGroup1) as RadioGroup
val rg2 = findViewById(R.id.radioGroup2) as RadioGroup
rg1.clearCheck(); // this is so we can start fresh, with no selection on both RadioGroups
rg2.clearCheck();
rg1.setOnCheckedChangeListener(listener1); //apply onCheckChangeListener
rg2.setOnCheckedChangeListener(listener2); 

然后创建onCheckChangeListener:

private val listener1 = object : OnCheckedChangeListener() {

fun onCheckedChanged(group: RadioGroup, checkedId: Int) {
    if (checkedId != -1) {
        rg2.setOnCheckedChangeListener(null) // remove the listener before clearing so we don't throw that stackoverflow exception(like Vladimir Volodin pointed out)
        rg2.clearCheck() // clear the second RadioGroup!
        rg2.setOnCheckedChangeListener(listener2) //reset the listener
        Log.e("XXX2", "do the work")
    }
}
韶兴德
2023-03-14

只需在更改侦听器中清除:

radioGroup1.setOnCheckedChangeListener { _, _ -> 
    radioGroup2.clearCheck()
}
 类似资料:
  • 如何在 Kotlin 中制作 2D Int 数组?我正在尝试将此代码转换为 Kotlin: 这是我尝试过的一个尝试,第一个2D阵列不起作用,但我让1D阵列起作用了:

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 这两个代码片段有什么区别?以及如何决定使用哪一个? 和 有了这两个代码,我可以像这样通过索引访问它

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 我的名单如下{(“a”,1),(“b”,2),(“c”,3),(“a”,4)} 我想将其转换为如下列表映射{("a"(1,4)),("b",(2)),("c",(3))} 也就是说,对于a,我们有一个1和4的列表,因为键是相同的。 Kotlin中如何将列表转换为地图中的答案?只显示唯一的价值(而不是像我一样的重复)。 我在Kotlin尝试了 但似乎不起作用。我怎样才能在 Kotlin 中做到这一点

  • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D