【问题标题】:Radio button and radio group单选按钮和单选组
【发布时间】:2018-12-14 05:43:41
【问题描述】:

我正在开发一个 android 应用程序,我想编写一个具有 4 个单选按钮的 radioGroup。我的目的是检查这些单选按钮是否被选中(知道我一次只能选择一个)并将所选单选按钮的信息保存在一个变量中。 下面是kotlin中的代码和xml中的代码。由于 if 的条件,我无法运行。我正在尝试使用 isChecked 来验证是否选择了单选按钮。

    fun button_ConfIniciais(view: View) {

    val encarregado = "Nome Próprio Apelido"
    val email = "nomeproprioapelido@hotmail.com"
    val palavrachave = "123"
    val checkedId = radioGroup_Ano.checkedRadioButtonId

    if (Text_Mail.text.isEmpty() &&
            Text_Pass.text.isEmpty() &&
            Text_Enc.text.isEmpty() &&
            Text_ConfPass.text.isEmpty()){

        val builder = AlertDialog.Builder(this@Configuracoes_Iniciais)

        builder.setTitle("Atenção")
        builder.setMessage("Deve preencher todos os campos.")
        builder.setPositiveButton("Continuar") { dialog, which ->
        }

        val dialog: AlertDialog = builder.create()
        dialog.show()
    } else {

        //I want to see if some of the radio button is selected, so I use the isChecked
        if (Text_Mail.text.trim().toString().equals(email) &&
                Text_Pass.text.trim().toString().equals(palavrachave) &&
                Text_Enc.text.trim().toString().equals(encarregado) &&
                Text_ConfPass.text.trim().toString().equals(palavrachave) &&
                 (radioGroup_Ano.radioButton_1.isChecked || 
                            radioGroup_Ano.radioButton_2.isChecked ||
                            radioGroup_Ano.radioButton_3.isChecked || 
                            radioButton_4.isChecked)) {

            val builder = AlertDialog.Builder(this@Configuracoes_Iniciais)

            builder.setTitle("Configurações Iniciais")
            builder.setMessage("Bem-Vindo ao Aprende Comigo! Agora que já configurou os seus dados está pronto para aprender!")
            builder.setPositiveButton("Seguinte") { dialog, which ->
                val it = Intent(this, Bem_Vindo_1::class.java)
                startActivity(it)
            }

            val dialog: AlertDialog = builder.create()
            dialog.show()

        } else {
            val builder = AlertDialog.Builder(this@Configuracoes_Iniciais)

            builder.setTitle("Atenção")
            builder.setMessage("Palavras-chaves não coicidem.")
            builder.setPositiveButton("Continuar") { dialog, which ->
            }

            val dialog: AlertDialog = builder.create()
            dialog.show()
        }

    }
}

【问题讨论】:

  • 你能在谷歌上搜索一下你的问题标题吗?
  • @Khemraj - 有一些链接会导致 Java 中的解决方案,例如 this one 但 OP 正试图在 Kotlin 中做到这一点。 (当然,我看到的搜索结果也是基于我的搜索历史)如果我们有 Kotlin 答案,那么我们就有了重复。否则我认为这是一个有效的问题,但我希望看到更多代码以更好地了解情况
  • @0X0nosugar 我已经阅读了这个问题。当我得知该用户想询问有关数千个链接中解释的 Radio 组功能时。所以我认为用户在提出关于 SO 的问题之前应该先搜索一下。

标签: android kotlin radio-button radio-group


【解决方案1】:
radioGroup.setOnCheckedChangeListener { group, i ->
    val selected = this.findViewById(group.checkedRadioButtonId))
}

【讨论】:

  • 这个答案可以通过添加解释为什么这个代码有效。
  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

在 Java 中:int id = radioGroup_Ano.getCheckedRadioButtonId();
在 Kotlin 中:val id = radioGroup_Ano.checkedRadioButtonId
这就是检查单选按钮 id 的方法。
如果您想为选中的单选按钮做一些特定的事情,请执行以下操作:

when (id) {
    R.id.radioButton_1 -> your code here
    R.id.radioButton_2 -> your code here
    R.id.radioButton_3 -> your code here
    R.id.radioButton_4 -> your code here
    else -> your code here 
}

【讨论】:

    【解决方案3】:

    为什么要向 Google 新用户询问这个问题?我用谷歌搜索了两个小时的大部分时间,发现几乎没有关于使用 Radio Groups 和 Radio Buttons 的可用 Kotlin 代码。这是一些非常完整的代码,展示了如何在 Kotlin 中使用这两者。使用 setOnCheckedChangeListener 和 when 语句对输入的数据执行四个数学函数之一。而不是真正优雅的数据输入错误检查。 XML 代码

    <?xml version="1.0" encoding="utf-8"?>
    

    <TextView
        android:id="@+id/tvValOne"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="32dp"
        android:paddingBottom="8dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp"
        android:text="Value One"
        android:textAlignment="textEnd"
        android:textColor="@color/color_Black"
        android:textSize="28sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toTopOf="parent" />
    
    <TextView
        android:id="@+id/tvValTwo"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:paddingBottom="8dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp"
        android:text="Value Two"
        android:textAlignment="viewEnd"
        android:textColor="@color/color_Black"
        android:textSize="28sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/guideline2"
        app:layout_constraintStart_toStartOf="@+id/tvValOne"
        app:layout_constraintTop_toBottomOf="@+id/tvValOne" />
    
    <TextView
        android:id="@+id/tvANS"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="32dp"
        android:paddingBottom="8dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp"
        android:text="Answer"
        android:textAlignment="textEnd"
        android:textColor="@color/color_deepBlue"
        android:textSize="28sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/guideline2"
        app:layout_constraintStart_toStartOf="@+id/tvValTwo"
        app:layout_constraintTop_toBottomOf="@+id/tvValTwo" />
    
    <android.support.constraint.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.3203125" />
    
    <EditText
        android:id="@+id/etValOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="number|numberDecimal"
        android:textColor="@color/color_Black"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toTopOf="parent" />
    
    <EditText
        android:id="@+id/etValTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="number|numberDecimal"
        android:textColor="@color/color_Black"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toBottomOf="@+id/etValOne" />
    
    <EditText
        android:id="@+id/etANS"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="number|numberDecimal"
        android:textColor="@color/color_Black"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toBottomOf="@+id/etValTwo" />
    
    <Button
        android:id="@+id/btnLAMmultiply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="120dp"
        android:onClick="onLAMmultiply"
        android:padding="16dp"
        android:text="Select Function"
        android:textColor="@color/color_Purple"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toBottomOf="@+id/etANS" />
    
    <Button
        android:id="@+id/btnBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:layout_marginStart="32dp"
        android:onClick="onBACK"
        android:padding="16dp"
        android:text="BACK"
        android:textColor="@color/color_Purple"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
    
    <TextView
        android:id="@+id/tvError"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="52dp"
        android:layout_marginStart="32dp"
        android:text="TextView"
        android:textColor="@color/color_Red"
        android:textSize="30sp"
        android:textStyle="bold"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="@+id/guideline2" />
    
    <RadioGroup
        android:id="@+id/rgRadioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="32dp"
        android:orientation="vertical"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toBottomOf="@+id/btnLAMmultiply" >
    
        <RadioButton
            android:id="@+id/rbAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Value Addition"
            android:textColor="@color/color_Purple"
            android:textSize="30sp"
            android:textStyle="bold" />
    
        <RadioButton
            android:id="@+id/rbSubtract"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Value Subtraction"
            android:textColor="@color/color_deepBlue"
            android:textSize="30sp"
            android:textStyle="bold" />
    
        <RadioButton
            android:id="@+id/rbMultiply"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Value Multiplication"
            android:textColor="@color/color_Red"
            android:textSize="30sp"
            android:textStyle="bold" />
    
        <RadioButton
            android:id="@+id/rbDivision"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Value Division"
            android:textColor="@color/color_Yellow"
            android:textSize="30sp"
            android:textStyle="bold" />
    
    </RadioGroup>
    

    现在是活动代码,如果您是 Listeners 的新手,请了解它们被放置在 onCreate 方法中,它们坐在那里,只需 LISTEN,无需调用它们

    package com.androidstackoverflow.learnkotlin
    

    导入 android.content.Context 导入 android.content.Intent 导入 android.support.v7.app.AppCompatActivity 导入 android.os.Bundle 导入 android.view.View 导入 android.widget.Toast 导入 kotlinx.android.synthetic.main.activity_page_three.* 导入 java.math.RoundingMode 导入 java.text.DecimalFormat 导入 android.os.CountDownTimer 导入 android.widget.RadioButton

    类 PageThreeActivity : AppCompatActivity() {

    var MathFunction:String = ""
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_page_three)
    
        rgRadioGroup.setOnCheckedChangeListener( { group, checkedId ->
            if (checkedId != -1) {
                MathFunction = (findViewById<View>(checkedId) as RadioButton).getText().toString()
                btnLAMmultiply.setText(MathFunction)
    
            } else {
                MathFunction = ""
                btnLAMmultiply.setText("Math Function")
    
            }
        })
    
    }// end onCreate
    
    
    fun doFunction(view: View){
    
        val id = rgRadioGroup.checkedRadioButtonId
    
        when (id) {
            R.id.rbAdd -> add(view)
            R.id.rbSubtract -> subtract(view)
            R.id.rbMultiply -> multiply(view)
            R.id.rbDivision ->division(view)
            else -> onLAMmultiply(view)
        }
    }
    
    fun add(view: View){
    
        val X = etValOne.text.toString()
        val Y = etValTwo.text.toString()
        val multB = {X:Double,Y:Double -> X.plus(Y)}
        val df = DecimalFormat("0.00")
        //val df = DecimalFormat("#.##")
        df.roundingMode = RoundingMode.CEILING
        df.format(multB(X.toDouble(),Y.toDouble()))
        etANS.setText(df.format(multB(X.toDouble(),Y.toDouble())).toString())
        etANS.setText(multB(X.toDouble(),Y.toDouble()).toString())
    }
    
    fun subtract(view: View){
    
        val X = etValOne.text.toString()
        val Y = etValTwo.text.toString()
        val multB = {X:Double,Y:Double -> X.minus(Y)}
        val df = DecimalFormat("0.00")
        //val df = DecimalFormat("#.##")
        df.roundingMode = RoundingMode.CEILING
        df.format(multB(X.toDouble(),Y.toDouble()))
        etANS.setText(df.format(multB(X.toDouble(),Y.toDouble())).toString())
        etANS.setText(multB(X.toDouble(),Y.toDouble()).toString())
    }
    
    fun multiply(view: View){
    
        val X = etValOne.text.toString()
        val Y = etValTwo.text.toString()
        val multB = {X:Double,Y:Double -> X.times(Y)}
        val df = DecimalFormat("0.00")
        //val df = DecimalFormat("#.##")
        df.roundingMode = RoundingMode.CEILING
        df.format(multB(X.toDouble(),Y.toDouble()))
        etANS.setText(df.format(multB(X.toDouble(),Y.toDouble())).toString())
        etANS.setText(multB(X.toDouble(),Y.toDouble()).toString())
    }
    
    fun division(view: View){
    
        val X = etValOne.text.toString()
        val Y = etValTwo.text.toString()
        val multB = {X:Double,Y:Double -> X.div(Y)}
        val df = DecimalFormat("0.00")
        //val df = DecimalFormat("#.##")
        df.roundingMode = RoundingMode.CEILING
        df.format(multB(X.toDouble(),Y.toDouble()))
        etANS.setText(df.format(multB(X.toDouble(),Y.toDouble())).toString())
        etANS.setText(multB(X.toDouble(),Y.toDouble()).toString())
    }
    
    fun onLAMmultiply(view: View ){
    
        if(etValOne.text.length == 0){
            error("Enter First Value")
            //toast("Enter First Value")
            etValOne.requestFocus()
            return@onLAMmultiply
        }
    
        if(etValTwo.text.length == 0){
            error("Enter Second Value")
            //toast("Enter Second Value")
            etValTwo.requestFocus()
            return@onLAMmultiply
        }
    
        if(rgRadioGroup.checkedRadioButtonId == -1){
            error("SELECT A FUNCTION")
            return@onLAMmultiply
        }
    
        doFunction(view)
    }
    
    fun Context.toast(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
    
    fun error(msg:String){
        object : CountDownTimer(4000, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                tvError.visibility = View.VISIBLE
                tvError.setText(msg)
            }
            override fun onFinish() {
                tvError.visibility = View.INVISIBLE
                tvError.setText("")
            }
        }.start()
    }
    
    fun onBACK(view: View){
        val intent = Intent(this@PageThreeActivity,MainActivity::class.java)
        startActivity(intent)
    }
    

    // 类结束 }

    【讨论】:

    • @Maria 我们发布了几行关于如何在 Kotlin 中使用 Radio Group 和 Radio Buttons 的代码。如果您对代码有其他问题,请随时发表评论
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 2010-11-13
    • 2017-07-24
    • 2011-10-19
    • 2019-10-04
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多