Me preguntaba si es posible agrupar cada sencillo RadioButton
en un único RadioGroup
manteniendo la misma estructura. Mi estructura se ve así:
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
Como puede ver, ahora cada uno RadioButton
es hijo de diferentes LinearLayout
. Intenté usar la estructura a continuación, pero no funciona:
- Radiogrupo
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
- LinearLayout_main
android
radio-button
android-linearlayout
radio-group
marcoqf73
fuente
fuente
Respuestas:
Parece que la buena gente de Google / Android asume que cuando usa RadioButtons, no necesita la flexibilidad que viene con todos los demás aspectos del sistema de diseño / interfaz de usuario de Android. En pocas palabras: no quieren que anide diseños y botones de opción. Suspiro.
Así que tienes que solucionar el problema. Eso significa que debe implementar botones de opción por su cuenta.
Esto realmente no es demasiado difícil. En su onCreate (), configure sus RadioButtons con su propio onClick () para que cuando estén activados, configurenChecked (verdadero) y hagan lo contrario para los otros botones. Por ejemplo:
Sí, lo sé, a la vieja usanza. Pero funciona. ¡Buena suerte!
fuente
Usa esta clase que creé. Encontrará todos los niños marcables en su jerarquía.
fuente
Bueno, escribí esta clase sencilla.
Úselo así:
o
Puede llamarlo en onCreate () de Actividad, por ejemplo. No importa en qué
RadioButton
haga clic, los demás quedarán sin marcar. Además, no importa si algunosRadioButtons
están dentro de otrosRadioGroup
o no.Aquí está la clase:
fuente
Aquí está mi solución basada en la solución @lostdev y la implementación de
RadioGroup
. Es un RadioGroup modificado para trabajar con RadioButtons (u otros CompoundButtons) que están anidados dentro de diseños secundarios.Puede usarlo en su diseño de la misma manera que lo haría con un usuario regular,
RadioGroup
con la excepción de que también funciona conRadioButton
vistas anidadas :fuente
Esta solución no se ha publicado, por lo que se publica:
Paso 0: Cree una
CompoundButton previousCheckedCompoundButton;
variable global.Paso 1: crear
OnCheckedChangedListener
para botones de opciónPaso 3: agregue oyente a todos los botones de opción:
¡¡Eso es!! has terminado.
fuente
Suspiro .. Realmente culpo que Android carece de una funcionalidad tan básica.
Adaptado de la respuesta de @ScottBiggs, esta es la forma posiblemente más corta de hacerlo con Kotlin:
fuente
Creé estos dos métodos para resolver este problema. Todo lo que tiene que hacer es pasar el ViewGroup donde están los RadioButtons (podría ser un RadioGroup, LinearLayout, RelativeLayout, etc.) y establece los eventos OnClick exclusivamente, es decir, siempre que uno de los RadioButtons que es un hijo del ViewGroup ( en cualquier nivel anidado) está seleccionado, los demás no están seleccionados. Funciona con tantos diseños anidados como desee.
El uso dentro de una actividad sería así:
fuente
Escribí mi propia clase de grupo de radio que permite contener botones de radio anidados. Echale un vistazo. Si encuentra errores, hágamelo saber.
fuente
Necesitas hacer dos cosas:
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Checkable
.Entonces creo que la mejor solución es implementar Checkable dentro de su LinearLayout interno: (gracias a daichan4649, desde su enlace, https://gist.github.com/daichan4649/5245378 , tomé todo el código pegado a continuación)
CheckableLayout.java
inflater_list_column.xml
TestFragment.java
fuente
Me he enfrentado al mismo problema porque quiero colocar 4 botones de radio diferentes en dos diseños lineales diferentes y estos diseños serán secundarios del grupo de radio. Para lograr el comportamiento deseado en RadioGroup, he sobrecargado la función addView
Aqui esta la solucion
fuente
No hay nada que le impida implementar esa estructura de diseño (
RadioGroup
de hecho es una subclase deLinearLayout
) pero no debería hacerlo. En primer lugar, crea una estructura de 4 niveles de profundidad (utilizando otra estructura de diseño puede optimizar esto) y, en segundo lugar, siRadioButtons
no son hijos directos de aRadioGroup
, el único elemento seleccionado en el grupo no funcionará. Esto significa que si selecciona unRadiobutton
de ese diseño y luego selecciona otroRadioButton
, terminará con dosRadioButtons
seleccionados en lugar del último seleccionado.Si explica lo que quiere hacer en ese diseño, tal vez pueda recomendarle una alternativa.
fuente
RadioButtons
y el padre,RadioGroup
entonces esto no funcionará como de costumbre y, básicamente, terminará con unLinearLayout
archivoRadioButtons
.Mis $ 0.02 basados en @infografnet y @lostdev (¡también gracias a @Neromancer por la sugerencia del botón compuesto!)
Uso (con oyente incluido):
Bonificación: ¡puede obtener el último botón marcado, la lista de botones completos y puede verificar cualquier botón por índice con esto!
fuente
fuente
Si bien este puede ser un tema más antiguo, me gustaría compartir rápidamente el código hacky simple que escribí. No es para todos y también le vendría bien un poco de refinamiento.
¿La situación para usar este código?
Este código es para personas que tienen un diseño de la pregunta original o similar, en mi caso fue el siguiente. Esto personalmente fue para un diálogo que estaba usando.
¿Qué hace el código por sí mismo?
Este código enumerará todos los elementos secundarios de "LinLayout_Main" y, para cada elemento secundario que sea un "LinearLayout", enumerará esa Vista para cualquier RadioButtons.
Simplemente buscará el padre "LinLayout_Main" y encontrará cualquier RadioButtons que esté en cualquier Child LinearLayouts.
MyMethod_ShowDialog
mostrará un cuadro de diálogo con un archivo de diseño XML mientras lo busca para configurar el "setOnClickListener" para cada RadioButton que encuentre
MyMethod_ClickRadio repetirá
cada RadioButton de la misma manera que "MyMethod_ShowDialog", pero en lugar de configurar el "setOnClickListener", en su lugar, "setChecked (false)" borrará cada RadioButton y luego, como último paso, "setChecked (false)" en el RadioButton que llamado evento de clic.
Puede haber errores, copiados del proyecto y renombrados Voids / XML / ID
También puede ejecutar el mismo tipo de bucle para averiguar qué elementos están marcados
fuente
Esta es una versión modificada de la solución de @ Infografnet. Es simple y fácil de usar.
RadioGroupHelper group = new RadioGroupHelper(this,R.id.radioButton1,R.id.radioButton2); group.radioButtons.get(0).performClick(); //programmatically
Solo copia y pega
fuente
Como se muestra en las respuestas, la solución es un simple truco personalizado. Aquí está mi versión minimalista en Kotlin.
entonces solo necesita hacer algo así en onCreate de su actividad o onViewCreated de fragment:
fuente
Esta es mi solución en Kotlin para un diseño personalizado con RadioButton en el interior.
fuente
Me meto en el mismo problema, tengo que usar el botón de radio para el género y todos tenían una imagen y un texto, así que intenté resolverlo de la siguiente manera.
archivo xml:
En el archivo java: configuré setOnCheckedChangeListener en los 3 botones de opción y anule el método como se menciona a continuación y funciona bien para mí.
fuente
MixedCompoundButtonGroup ¡ lo hace por usted!
MixedCompoundButtonGroup gist
fuente
Puede utilizar este sencillo código de extensión de RadioGroup. Suelta los diseños / vistas / imágenes junto con los RadioButtons y funcionará.
Contiene devolución de llamada de selección que devuelve el RadioButton seleccionado con su índice y puede establecer la selección mediante programación por índice o id:
Úselo en su diseño xml:
Para registrarse en la devolución de llamada:
fuente