Je me demandais s'il était possible de regrouper chacun RadioButton
dans un unique en RadioGroup
conservant la même structure. Ma structure ressemble à ceci:
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
Comme vous pouvez le voir, maintenant chacun RadioButton
est un enfant de différent LinearLayout
. J'ai essayé d'utiliser la structure ci-dessous, mais cela ne fonctionne pas:
- Radiogroupe
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
- LinearLayout_main
Réponses:
Il semble que les bonnes personnes de Google / Android supposent que lorsque vous utilisez RadioButtons, vous n'avez pas besoin de la flexibilité qui accompagne tous les autres aspects du système d'interface utilisateur / de mise en page Android. Pour faire simple: ils ne veulent pas que vous imbriquiez les mises en page et les boutons radio. Soupir.
Alors tu dois contourner le problème. Cela signifie que vous devez implémenter vous-même des boutons radio.
Ce n'est vraiment pas trop difficile. Dans votre onCreate (), définissez vos RadioButtons avec leur propre onClick () de sorte que lorsqu'ils sont activés, ils définissentChecked (true) et font l'inverse pour les autres boutons. Par exemple:
Ouais, je sais - façon old-school. Mais ça marche. Bonne chance!
la source
Utilisez cette classe que j'ai créée. Il trouvera tous les enfants vérifiables dans votre hiérarchie.
la source
Eh bien, j'ai écrit ce cours simple.
Utilisez-le simplement comme ceci:
ou
Vous pouvez l'appeler dans onCreate () of Activity par exemple. Peu importe sur quoi
RadioButton
vous cliquez, les autres ne seront pas cochés. Aussi, peu importe, si certains d'entre euxRadioButtons
sont à l'intérieur de certainsRadioGroup
ou non.Voici la classe:
la source
Voici ma solution basée sur la solution @lostdev et la mise en œuvre de
RadioGroup
. C'est un RadioGroup modifié pour fonctionner avec des RadioButtons (ou d'autres CompoundButtons) qui sont imbriqués dans des dispositions enfants.Vous pouvez l'utiliser dans votre mise en page de la même manière que vous le feriez pour un
RadioGroup
modèle normal, à l'exception du fait qu'il fonctionne également avec desRadioButton
vues imbriquées :la source
Cette solution n'a pas été postée donc publication:
Étape 0: créez une
CompoundButton previousCheckedCompoundButton;
variable globale.Étape 1: Créer
OnCheckedChangedListener
pour les boutons radioÉtape 3: ajoutez un auditeur à tous les boutons radio:
C'est tout!! vous avez terminé.
la source
Soupir .. Vraiment blâmer qu'Android ne dispose pas d'une telle fonctionnalité de base.
Adapté de la réponse @ScottBiggs, voici le moyen le plus court de le faire avec Kotlin:
la source
J'ai créé ces deux méthodes pour résoudre ce problème. Tout ce que vous avez à faire est de passer le ViewGroup où se trouvent les RadioButtons (il peut s'agir d'un RadioGroup, LinearLayout, RelativeLayout, etc.) et il définit les événements OnClick exclusivement, c'est-à-dire chaque fois que l'un des RadioButtons est un enfant du ViewGroup ( à tout niveau imbriqué) est sélectionné, les autres ne sont pas sélectionnés. Il fonctionne avec autant de dispositions imbriquées que vous le souhaitez.
L'utilisation à l'intérieur d'une activité serait comme ceci:
la source
J'ai écrit ma propre classe de groupe radio qui permet de contenir des boutons radio imbriqués. Vérifiez-le. Si vous trouvez des bogues, faites-le moi savoir.
la source
Vous devez faire deux choses:
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Checkable
.Je pense donc que la meilleure solution est d'implémenter Checkable dans votre LinearLayout interne: (merci à daichan4649, à partir de son lien, https://gist.github.com/daichan4649/5245378 , j'ai pris tout le code collé ci-dessous)
CheckableLayout.java
inflater_list_column.xml
TestFragment.java
la source
J'ai rencontré le même problème que je veux placer 4 boutons radio différents dans deux linéarités différentes et ces mises en page seront l'enfant du groupe radio. Pour obtenir le comportement souhaité dans RadioGroup, j'ai surchargé la fonction addView
Voici la solution
la source
Rien ne vous empêche d'implémenter cette structure de mise en page (
RadioGroup
est en fait une sous-classe deLinearLayout
) mais vous ne devriez pas. Tout d'abord, vous créez une structure de 4 niveaux de profondeur (en utilisant une autre structure de mise en page, vous pouvez l'optimiser) et deuxièmement, si vousRadioButtons
n'êtes pas des enfants directs de aRadioGroup
, le seul élément sélectionné dans le groupe ne fonctionnera pas. Cela signifie que si vous sélectionnez unRadiobutton
dans cette mise en page, puis en sélectionnez un autre,RadioButton
vous vous retrouverez avec deuxRadioButtons
sélectionnés au lieu du dernier sélectionné.Si vous expliquez ce que vous voulez faire dans cette mise en page, je peux peut-être vous recommander une alternative.
la source
RadioButtons
et le parentRadioGroup
alors cela ne fonctionnera pas comme d' habitude et , fondamentalement , vous vous retrouverez avec unLinearLayout
rempliRadioButtons
.Mon 0,02 $ basé sur @infografnet et @lostdev (merci également @Neromancer pour la suggestion du bouton composé!)
Utilisation (avec auditeur inclus):
Bonus: Vous pouvez obtenir le dernier bouton coché, la liste des boutons entiers, et vous pouvez vérifier n'importe quel bouton par index avec ça!
la source
la source
Bien que ce soit peut-être un sujet plus ancien, j'aimerais partager rapidement le code de piratage simple que j'ai écrit. Ce n'est pas pour tout le monde et pourrait également être amélioré.
La situation pour utiliser ce code ??
Ce code est destiné aux personnes qui ont une mise en page de la question originale ou similaire, dans mon cas, c'était comme ci-dessous. C'était personnellement pour un dialogue que j'utilisais.
Que fait le code?
Ce code énumérera chaque enfant de "LinLayout_Main" et pour chaque enfant qui est un "LinearLayout", il énumérera ensuite cette vue pour tous les RadioButtons.
Il cherchera simplement le parent "LinLayout_Main" et trouvera tous les RadioButtons qui se trouvent dans n'importe quel Child LinearLayouts.
MyMethod_ShowDialog
une boîte de dialogue avec un fichier de mise en page XML tout en le recherchant pour définir le "setOnClickListener" pour chaque RadioButton qu'il trouve
MyMethod_ClickRadio
boucle chaque RadioButton de la même manière que "MyMethod_ShowDialog", mais au lieu de définir le "setOnClickListener", il sera à la place "setChecked (false)" pour effacer chaque RadioButton et ensuite, à la dernière étape, "setChecked (false)" au RadioButton qui appelé l'événement de clic.
Il peut y avoir des bugs, copiés du projet et renommés Voids / XML / ID
Vous pouvez également exécuter le même type de boucle pour savoir quels éléments sont vérifiés
la source
Il s'agit d'une version modifiée de la solution @ Infografnet. C'est simple et facile à utiliser.
RadioGroupHelper group = new RadioGroupHelper(this,R.id.radioButton1,R.id.radioButton2); group.radioButtons.get(0).performClick(); //programmatically
Copiez et collez simplement
la source
Comme indiqué dans les réponses, la solution est un simple hack personnalisé. Voici ma version minimaliste dans Kotlin.
alors il vous suffit de faire quelque chose comme ça dans onCreate de votre activité ou dans onViewCreated de fragment:
la source
C'est ma solution sur Kotlin pour une mise en page personnalisée avec RadioButton à l'intérieur.
la source
Je rencontre le même problème, je dois utiliser le bouton radio pour le sexe et tous étaient avec une image et un texte, alors j'ai essayé de le résoudre en utilisant la manière suivante.
fichier xml:
Dans le fichier java: j'ai défini setOnCheckedChangeListener sur les 3 boutons radio et la méthode de remplacement comme mentionné ci-dessous et cela fonctionne bien pour moi.
la source
MixedCompoundButtonGroup le fait pour vous!
MixedCompoundButtonGroup gist
la source
Vous pouvez utiliser ce simple code d'extension RadioGroup. Déposez toutes les dispositions / vues / images qu'il contient avec les RadioButtons et cela fonctionnera.
Il contient un rappel de sélection qui renvoie le RadioButton sélectionné avec son index et vous pouvez définir la sélection par programme par index ou id:
Utilisez-le dans votre mise en page xml:
Pour vous inscrire au rappel:
la source