Maria
Maria

Reputation: 49

Radio button and radio group

I'm developing an android application and I want to program a radioGroup that has 4 radio buttons. My purpose is to check if these radio buttons have been selected (knowing that I can only select one at a time) and save the information of the selected radio button in a variable. Below is the code in kotlin and the code in xml. I am not able to run because of the condition made on the if. I'm trying to use the isChecked to verify if the radio button is selected.

    fun button_ConfIniciais(view: View) {

    val encarregado = "Nome Próprio Apelido"
    val email = "[email protected]"
    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()
        }

    }
}

Upvotes: 2

Views: 6795

Answers (3)

Vector
Vector

Reputation: 3235

Why ask a New User to Google the question? I have Google this for the better part of two hours and found little if any usable Kotlin code on using Radio Groups and Radio Buttons. Here is some very complete code that shows how to use both in Kotlin. With a setOnCheckedChangeListener and the when statement to preform one of four math function on entered data. And not real elegant data entry error checking. XML Code

<?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>

Now the Activity Code if you are new to Listeners PLEASE understand they are placed in the onCreate method and they sit there and just LISTEN no need to call them

package com.androidstackoverflow.learnkotlin

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

class 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)
}

// End of Class }

Upvotes: 3

user8959091
user8959091

Reputation:

In Java: int id = radioGroup_Ano.getCheckedRadioButtonId();
In Kotlin: val id = radioGroup_Ano.checkedRadioButtonId
That's the way to get checked radiobutton's id.
If you want to do something specific for the checked radiobutton, do something like this:

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 
}

Upvotes: 5

Hobo Joe
Hobo Joe

Reputation: 902

radioGroup.setOnCheckedChangeListener { group, i ->
    val selected = this.findViewById(group.checkedRadioButtonId))
}

Upvotes: 2

Related Questions