Android

RadioGroup y RadioButton en Android – Ejemplos

En una aplicación móvil para Android que estoy desarrollando me vi en la necesidad de agregar algunos widgets de tipo RadioButton. Recordemos que estos widgets van dentro de un RadioGroup para que solamente se pueda seleccionar uno.

Android – RadioGroup y RadioButton con Java

Veremos entonces cómo poner los RadioButton dentro de un RadioGroup y saber cuál elemento está seleccionado.

El layout con XML

Hay que poner un RadioGroup, asignarle un id y dentro de él poner todos los RadioButton que se necesiten.

Tip: puedes cambiar la orientación de los RadioButton usando la propiedad orientation del elemento RadioGroup. En este caso se usa la orientación horizontal.

<RadioGroup
        android:id="@+id/radioGroupTipoLugar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkedButton="@id/rbPublico"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rbPrivado"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Privado" />

        <RadioButton
            android:id="@+id/rbPublico"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Público" />
    </RadioGroup>

Hay muchos atributos pero los que importan son:

  • id: indica el id del RadioGroup que más tarde vamos a usar
  • checkedButton: el id del RadioButton que va a estar seleccionado por defecto

Dentro del RadioGroup tenemos a 2 RadioButton. Cada uno tiene un id que igualmente vamos a necesitar más tarde.

Otro atributo importante es el de text pues es el texto que se muestra, y finalmente el weight o peso indica cuánto espacio disponible ocupan. En este caso los dos ocupan 1, por lo tanto ocupan lo mismo.

Obtener referencia desde Java

Después obtenemos todos los elementos dentro de Java. Definimos unas variables de instancia; pero primero importamos lo necesario:

import android.widget.RadioButton;
import android.widget.RadioGroup;

Ahora sí definimos los RadioButton y el RadioGroup. En este ejemplo solamente usamos dos RadioButton dentro de un RadioGroup pero se pueden usar varios al mismo tiempo.

// Nota: si estás en un fragment llama a view.findViewById dentro del método onViewCreated
RadioGroup radioGroupTipoLugar = findViewById(R.id.radioGroupTipoLugar);
RadioButton radioButtonPrivado = findViewById(R.id.rbPrivado);
RadioButton radioButtonPublico = findViewById(R.id.rbPublico);

Listener cuando se selecciona un RadioButton

Como bonus, si quieres escuchar cuando un elemento es seleccionado, agrega un listener al RadioGroup:

radioGroupTipoLugar.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        // Ahora i es el id del elemento seleccionado. Nota: es el id, no el índice
        // compara usando radioButtonPrivado.getId() == i
    }
});

Definimos un listener y sobrescribimos el método onCheckedChanged. En esa función nos pasan el id numérico del RadioButton, el cual podemos comparar obteniendo el id de los RadioButton que tenemos. Mira el ejemplo de abajo para ver cómo se hace.

Saber cuál opción está seleccionada

Finalmente, para saber cuál opción está seleccionada (sin el listener, por ejemplo, obtenerlo en el click de un botón ajeno al RadioGroup) podemos usar el método getCheckedRadioButtonId así:

int idDeRadioButtonSeleccionado = radioGroupTipoLugar.getCheckedRadioButtonId();
if (idDeRadioButtonSeleccionado == radioButtonPrivado.getId()) {
    // OK seleccionaron la opción "privado"
} else if (idDeRadioButtonSeleccionado == radioButtonPublico.getId()) {
    // Seleccionaron el público
    // Aquí pueden ir más else if
} else {
    // Mmmh, imposible pero pon el else por las dudas
}

Fíjate en que llamamos al método en el RadioGroup, y comparamos usando el id que tiene cada RadioButton.

Conclusión

La programación con Android es complicada en algunos sentidos, pero si los grandes diseñadores y programadores hicieron las cosas así no queda más que entenderlos, debieron tener razones suficientes para diseñar las cosas de esa manera.

Aprende más sobre Android y Java.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.