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.
Veremos entonces cómo poner los RadioButton dentro de un RadioGroup y saber cuál elemento está seleccionado.
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:
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.
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);
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.
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.
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.