Ich habe mich gefragt, ob es möglich ist, jedes einzelne RadioButton
in einem Unikat zu gruppieren, wobei RadioGroup
dieselbe Struktur beibehalten wird. Meine Struktur sieht folgendermaßen aus:
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
Wie Sie sehen können, ist jetzt jeder RadioButton
ein Kind von unterschiedlichemLinearLayout
. Ich habe versucht, die folgende Struktur zu verwenden, aber es funktioniert nicht:
- Radiogruppe
- LinearLayout_main
- LinearLayout_1
- RadioButton1
- LinearLayout_2
- RadioButton2
- LinearLayout_3
- RadioButton3
- LinearLayout_1
- LinearLayout_main
android
radio-button
android-linearlayout
radio-group
marcoqf73
quelle
quelle
Antworten:
Es scheint, dass die guten Leute bei Google / Android davon ausgehen, dass Sie bei der Verwendung von RadioButtons nicht die Flexibilität benötigen, die mit jedem anderen Aspekt des Android-UI / Layout-Systems verbunden ist. Einfach ausgedrückt: Sie möchten nicht, dass Sie Layouts und Optionsfelder verschachteln. Seufzer.
Also musst du das Problem umgehen. Das heißt, Sie müssen Optionsfelder selbst implementieren.
Das ist wirklich nicht zu schwer. Stellen Sie in Ihrem onCreate () Ihre RadioButtons mit ihrem eigenen onClick () so ein, dass sie bei Aktivierung setChecked (true) setzen und für die anderen Schaltflächen das Gegenteil tun. Beispielsweise:
Ja, ich weiß - so altmodisch. Aber es funktioniert. Viel Glück!
quelle
Verwenden Sie diese Klasse, die ich erstellt habe. Es werden alle überprüfbaren untergeordneten Elemente in Ihrer Hierarchie gefunden.
quelle
Nun, ich habe diese einfache Klasse geschrieben.
Verwenden Sie es einfach so:
oder
Sie können es beispielsweise in onCreate () von Activity aufrufen. Egal auf was
RadioButton
Sie klicken, die anderen werden deaktiviert. Auch spielt es keine Rolle, ob sich einigeRadioButtons
in einigen befindenRadioGroup
oder nicht.Hier ist die Klasse:
quelle
Hier ist meine Lösung basierend auf @lostdev Lösung und Implementierung von
RadioGroup
. Es handelt sich um eine RadioGroup, die für die Arbeit mit RadioButtons (oder anderen CompoundButtons) geändert wurde, die in untergeordneten Layouts verschachtelt sind.Sie können es in Ihrem Layout genauso verwenden wie ein normales Layout,
RadioGroup
mit der Ausnahme, dass es auch mit verschachteltenRadioButton
Ansichten funktioniert :quelle
Diese Lösung wurde nicht veröffentlicht.
Schritt 0: Erstellen Sie eine
CompoundButton previousCheckedCompoundButton;
als globale Variable.Schritt 1:
OnCheckedChangedListener
Für Optionsfelder erstellenSchritt 3: Fügen Sie allen Optionsfeldern einen Listener hinzu:
Das ist es!! du bist fertig.
quelle
Seufz .. Wirklich schuld, dass Android eine so grundlegende Funktionalität fehlt.
In Anlehnung an die Antwort von @ScottBiggs ist hier der möglicherweise kürzeste Weg, dies mit Kotlin zu tun:
quelle
Ich habe diese beiden Methoden entwickelt, um dieses Problem zu lösen. Sie müssen lediglich die ViewGroup übergeben, in der sich die RadioButtons befinden (z. B. RadioGroup, LinearLayout, RelativeLayout usw.), und die OnClick-Ereignisse werden ausschließlich festgelegt, dh immer dann, wenn einer der RadioButtons ein untergeordnetes Element der ViewGroup ist ( auf einer beliebigen verschachtelten Ebene) ausgewählt ist, werden die anderen nicht ausgewählt. Es funktioniert mit so vielen verschachtelten Layouts, wie Sie möchten.
Die Verwendung innerhalb einer Aktivität würde folgendermaßen aussehen:
quelle
Ich habe meine eigene Radiogruppenklasse geschrieben, die verschachtelte Optionsfelder enthalten kann. Hör zu. Wenn Sie Fehler finden, lassen Sie es mich bitte wissen.
quelle
Sie müssen zwei Dinge tun:
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Checkable
.Daher denke ich, dass die bessere Lösung darin besteht, Checkable in Ihrem inneren LinearLayout zu implementieren: (Dank an daichan4649 über seinen Link https://gist.github.com/daichan4649/5245378 ich den gesamten unten eingefügten Code übernommen.)
CheckableLayout.java
inflater_list_column.xml
TestFragment.java
quelle
Ich habe das gleiche Problem, da ich 4 verschiedene Optionsfelder in zwei verschiedenen linearen Layouts platzieren möchte und diese Layouts das Kind der Radiogruppe sind. Um das gewünschte Verhalten in RadioGroup zu erreichen, habe ich die Funktion addView überladen
Hier ist die Lösung
quelle
Nichts hindert Sie daran, diese Layoutstruktur zu implementieren (
RadioGroup
ist in der Tat eine Unterklasse vonLinearLayout
), aber Sie sollten es nicht tun . Erstens erstellen Sie eine Struktur mit einer Tiefe von 4 Ebenen (mit einer anderen Layoutstruktur können Sie diese optimieren) und zweitens funktioniert das einzige in der Gruppe ausgewählte ElementRadioButtons
nicht , wenn Sie keine direkten untergeordneten Elemente von aRadioGroup
sind . Dies bedeutet , dass , wenn Sie eine Auswahl aus diesem Layout und wählen Sie dann eine andere Sie mit zwei am Ende dannRadiobutton
RadioButton
RadioButtons
anstelle des zuletzt ausgewählten ausgewählt werden.Wenn Sie erklären, was Sie in diesem Layout tun möchten, kann ich Ihnen vielleicht eine Alternative empfehlen.
quelle
RadioButtons
und dem übergeordneten Element haben,RadioGroup
funktioniert dies nicht wie gewohnt und Sie erhalten im Grunde einLinearLayout
gefülltes mitRadioButtons
.Meine $ 0.02 basierend auf @infografnet und @lostdev (danke auch @Neromancer für den Vorschlag für den Compound Button!)
Verwendung (mit eingeschlossenem Listener):
Bonus: Sie können die zuletzt aktivierte Schaltfläche, die Liste der gesamten Schaltflächen, und damit jede Schaltfläche per Index überprüfen!
quelle
quelle
Während dies vielleicht ein älteres Thema ist, möchte ich schnell einfachen Hacky-Code teilen, den ich geschrieben habe. Es ist nicht jedermanns Sache und könnte auch etwas verfeinert werden.
Die Situation, um diesen Code zu verwenden?
Dieser Code ist für Personen gedacht, die ein Layout der ursprünglichen Frage oder ähnliches haben. In meinem Fall war es wie folgt. Dies war persönlich für einen Dialog, den ich benutzte.
Was macht der Code selbst?
Dieser Code listet jedes untergeordnete Element von "LinLayout_Main" auf und listet für jedes untergeordnete Element, das ein "LinearLayout" ist, diese Ansicht für alle RadioButtons auf.
Es wird einfach das übergeordnete "LinLayout_Main" angezeigt und alle RadioButtons gefunden, die sich in einem untergeordneten LinearLayout befinden.
MyMethod_ShowDialog
einen Dialog mit einer XML-Layoutdatei an und sucht gleichzeitig nach dem "setOnClickListener" für jeden gefundenen RadioButton
MyMethod_ClickRadio schleift
jeden RadioButton auf die gleiche Weise wie "MyMethod_ShowDialog", aber anstatt "setOnClickListener" zu setzen, wird stattdessen "setChecked (false)" gesetzt, um jeden RadioButton zu löschen, und als letzter Schritt wird "setChecked (false)" auf den RadioButton gesetzt das Klickereignis genannt.
Möglicherweise gibt es Fehler, die aus dem Projekt kopiert und in Voids / XML / ID umbenannt wurden
Sie können auch denselben Schleifentyp ausführen, um herauszufinden, welche Elemente überprüft werden
quelle
Dies ist eine modifizierte Version der @ Infografnet-Lösung. Es ist einfach und leicht zu bedienen.
RadioGroupHelper group = new RadioGroupHelper(this,R.id.radioButton1,R.id.radioButton2); group.radioButtons.get(0).performClick(); //programmatically
Einfach kopieren und einfügen
quelle
Wie in den Antworten gezeigt, ist die Lösung ein einfacher benutzerdefinierter Hack. Hier ist meine minimalistische Version in Kotlin.
Dann müssen Sie nur noch so etwas in onCreate Ihrer Aktivität oder in onViewCreated von fragment tun:
quelle
Dies ist meine Lösung auf Kotlin für benutzerdefiniertes Layout mit RadioButton im Inneren.
quelle
Ich habe das gleiche Problem, ich muss das Optionsfeld für das Geschlecht verwenden und alle hatten ein Bild und einen Text, also habe ich versucht, es auf folgende Weise zu lösen.
XML-Datei:
In der Java-Datei: Ich habe setOnCheckedChangeListener auf alle 3 Optionsfelder gesetzt und die Methode wie unten beschrieben überschrieben, und sie funktioniert gut für mich.
quelle
MixedCompoundButtonGroup das für Sie!
MixedCompoundButtonGroup Kern
quelle
Sie können diesen einfachen RadioGroup-Erweiterungscode verwenden. Legen Sie alle Layouts / Ansichten / Bilder zusammen mit den RadioButtons ab, und es wird funktionieren.
Es enthält einen Auswahlrückruf, der den ausgewählten RadioButton mit seinem Index zurückgibt, und Sie können die Auswahl programmgesteuert nach Index oder ID festlegen:
Verwenden Sie es in Ihrem Layout-XML:
So registrieren Sie sich für den Rückruf:
quelle