Comment le groupe RadioButton à partir de différents LinearLayouts?
Je me demandais si c'est possible pour chaque groupe unique RadioButton
dans un unique RadioGroup
en conservant la même structure. Ma structure ressembler à ceci:
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
Comme vous pouvez le voir, maintenant chaque RadioButton
est un enfant de différentes LinearLayout
. J'ai essayé d'utiliser la structure ci-dessous, mais ça ne fonctionne pas:
- Groupe de boutons
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
- LinearLayout_main
- crow, si vous êtes contraint de demander puis vous n'avez jamais travaillé avec un designer pour les flux d'INTERFACE utilisateur (et je devine vos boutons radio ne sont probablement pas très sophistiqué). Imaginez (si vous pouvez) un bouton radio qui se trouve à côté de deux morceaux de texte, qui est un titre et un qui est un sous-texte. Maintenant, imaginez que 5 de ces sur le dessus de l'un à l'autre. Comment voulez-vous accomplir cela? Ah bon... vous ne pouvez pas. C'est une bonne chose que rien ne sorte de fantaisie a jamais besoin ou google serait vraiment stupide d'avoir négligé de base, telle la fonctionnalité de présentation dans leur large ensemble d'outils de mise en page.
- wow, même si je suis d'accord avec ce que tu dis (l'utilisation de composants radiobutton), mais peut-être que votre réaction était trop émotive? 🙂
- Il n'était pas émotionnel autant que clairement agacé. Ce n'est que commentaire offre de l'OP? Qu'offre-t-il pour le thread en général? Cela implique que la question est sans fondement et est impatient et sarcastique. S'il avait commencé avec "Pourriez-vous expliquer pourquoi vous voulez faire ce" qui serait à la fois approprié et poli. "Je suis bien obligé de se demander" est à peine voilée alternative à "quel genre d'idiot aurait besoin de ce loufoque kluge?". Au moins c'est comment je l'ai lu.
- Il y a trois ans, et toujours pas de réponse?
- Pourquoi android dev ne permettent pas d'utiliser LinearLayout à l'intérieur de groupe de boutons? Guimauve a été libéré.
- Toujours pas de réponse adéquate? J'étais à la recherche d'une solution
- la lecture de Gaurav Agawal commentaire, je pense qu'il devrait être facilité pour downvote un commentaire
Vous devez vous connecter pour publier un commentaire.
Il semble que le bon peuple de Google/Android supposer que, lorsque vous utilisez des composants radiobutton, vous n'avez pas besoin de la flexibilité qui vient avec tous les autres aspects de l'INTERFACE utilisateur Android/système de mise en page. Pour faire simple: ils ne veulent pas que vous nid mises en page et les boutons radio. Soupir.
Donc tu dois contourner le problème. Cela signifie que vous devez mettre en œuvre des boutons radio sur votre propre.
Ce n'est vraiment pas trop difficile. Dans votre onCreate(), définissez vos composants radiobutton avec leur propre onClick (), de sorte que lorsqu'ils sont activés, ils setChecked(true) et faire le contraire pour les autres boutons. Par exemple:
Ouais, je sais, chemin de la vieille école. Mais il fonctionne. Bonne chance!
L'utilisation de cette classe que j'ai créé. Il va trouver toutes vérifiables enfants de votre hiérarchie.
Bien, j'ai écrit cette classe simple.
Simplement l'utiliser comme ceci:
ou
Vous pouvez l'appeler dans onCreate() de l'Activité par exemple. N'importe qui
RadioButton
vous cliquez sur, les autres deviendront pas cochée. Aussi, pas de questions, si certains deRadioButtons
sont à l'intérieur de certainsRadioGroup
, ou pas.Voici la classe:
Voici ma solution basée sur @lostdev solution et la mise en œuvre de
RadioGroup
. C'est un groupe de boutons modifié pour fonctionner avec les composants radiobutton (ou d'autres CompoundButtons) qui sont imbriquées à l'intérieur des enfants mises en page.Vous pouvez l'utiliser dans votre mise en page de la même manière que vous le feriez pour un régulier
RadioGroup
à l'exception qu'il fonctionne avec imbriquéRadioButton
point de vue ainsi:Soupir.. Vraiment blâmer que Android ne possède pas un tel fonctionnalités de base.
Adapté de @ScottBiggs réponse, voici la peut-être plus court chemin à faire avec Kotlin:
J'ai créé ces deux méthodes pour résoudre ce problème. Tout ce que vous avez à faire est de passer la ViewGroup où les RadioButtons sont (peut-être un groupe de boutons, LinearLayout, RelativeLayout, etc.) et il définit l'événement OnClick exclusivement, qui est, à chaque fois que l'un des composants radiobutton qui est un enfant de la ViewGroup (à tout niveau imbriqué) est sélectionnée, les autres sont désactivées. Il travaille avec de nombreux imbriqués les mises en page comme vous le souhaitez.
Utilisation à l'intérieur d'une activité serait comme ceci:
J'ai écrit ma propre radio du groupe classe qui permet de contenir imbriqué boutons radio. Check it out. Si vous trouvez des bugs, s'il vous plaît laissez-moi savoir.
Vous devez faire deux choses:
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Checkable
.Je pense donc que la meilleure solution est de mettre en œuvre Vérifiable à l'intérieur de votre intérieur LinearLayout: (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
Il n'y a rien qui vous empêche de mise en œuvre de cette disposition de la structure(
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(à l'aide d'un autre modèle de la structure vous pouvez optimiser ce) et, deuxièmement, si votreRadioButtons
ne sont pas les enfants directs d'unRadioGroup
, le seul élément sélectionné dans le groupe ne fonctionnera pas. Cela signifie que si vous sélectionnez unRadiobutton
à partir de cette mise en page, puis sélectionnez un autreRadioButton
, vous vous retrouverez avec deuxRadioButtons
sélectionné au lieu de la dernière sélectionné.Si vous expliquez ce que vous voulez faire dans cette mise en page peut-être que je peux vous recommander une alternative.
RadioButtons
et le parentRadioGroup
alors cela ne fonctionnera pas comme d'habitude et, fondamentalement, vous finirez avec unLinearLayout
rempli avecRadioButtons
.J'ai confrontés au même problème que je veux placer 4 bouton radio dans deux différents linearlayout et ces disposition de l'enfant de groupe de boutons radio. Pour réaliser le désir de comportement dans le groupe de boutons que j'ai surchargé le addView fonction
Voici la solution
Cette solution n'a pas été posté pour l'affichage :
Étape 0: Créer un
CompountButton previousCheckedCompoundButton;
comme variable globale.Étape 1: Créer
OnCheckedChangedListener
pour les boutons radioÉtape 3: ajout d'un écouteur à tous les boutons radio:
C'est tout!! votre e fait.
Mon de 0,02 $basé sur @infografnet et @lostdev (aussi merci @Neromancer pour le Composé Bouton suggestion!)
D'utilisation (avec de l'auditeur):
Bonus: Vous pouvez obtenir la dernière coché la case, la liste de l'ensemble des boutons, et vous pouvez le vérifier n'importe quel bouton à l'indice avec cette!
Bien que cela peut-être un ancien sujet, je voudrais partager rapidement simple hacky code que j'ai écrit.. ce n'est pas pour tout le monde et pourrait faire avec un peu de raffinement ainsi..
La situation pour utiliser ce code??
Ce code est pour les gens qui ont une mise en page de la question d'origine ou similaire, dans mon cas, c'était comme ci-dessous. C'était personnellement pour un Dialogue que j'ai été en utilisant.
Quel est le code lui-même??
Ce code va énumérer jamais Enfant de la "LinLayout_Main" et pour chaque enfant qui est une "LinearLayout" il sera alors énumérer ce point de Vue pour toutes les RadioButtons.
Simplement, il va chercher le parent "LinLayout_Main" et de trouver tous les composants radiobutton qui sont dans n'importe quel Enfant LinearLayouts.
MyMethod_ShowDialog
Affichera une boîte de dialogue avec un XML fichier de mise en page tout en cherchant à définir le "setOnClickListener" pour chaque composant RadioButton il trouve
MyMethod_ClickRadio
En boucle chaque composant RadioButton de la même façon "MyMethod_ShowDialog" ne mais plutôt de la définition de la "setOnClickListener" qu'il va plutôt "setChecked(false)" pour effacer chaque composant RadioButton et puis comme la dernière étape "setChecked(false)" à la case d'option qui a appelé l'événement click.
Il peut y avoir des bugs, copié à partir du projet et renommé Vides/XML/ID
Vous pouvez également exécuter le même type de boucle pour savoir quels articles sont vérifiés
Ceci est une version modifiée de @Infografnet de la solution. C'est simple et facile à utiliser.
RadioGroupHelper group = new RadioGroupHelper(this,R.id.radioButton1,R.id.radioButton2);
group.radioButtons.get(0).performClick(); //programmatically
Il suffit de copier et coller
Comme indiqué dans les réponses, la solution est simple et personnalisé hack. Voici ma version minimaliste dans Kotlin.
ensuite, vous avez juste besoin de faire quelque chose comme ça dans votre activité est onCreate ou fragment de la onViewCreated :
C'est ma solution sur Kotlin pour la mise en page personnalisée avec RadioButton à l'intérieur.
Essayer de cette façon pour ajouter
RadioGroup
dansLinearLayout
.