Stellen Sie den ausgewählten Index einer Android RadioGroup ein
93
Gibt es eine Möglichkeit, den ausgewählten Index einer RadioGroup in Android festzulegen, außer die untergeordneten Radiobuttons zu durchlaufen und das Optionsfeld am ausgewählten Index zu aktivieren?
Hinweis: Ich fülle die Optionsfeldgruppe zur Laufzeit aus.
Wenn Ihre Funkgruppe in einer Layout-XML-Datei definiert ist, kann jeder Schaltfläche eine ID zugewiesen werden. Dann überprüfen Sie einfach eine Schaltfläche wie diese
radioGroup.check(R.id.myButtonId);
Wenn Sie Ihre Funkgruppe programmgesteuert erstellt haben (ich bin mir nicht einmal sicher, wie Sie dies tun ...), sollten Sie möglicherweise eine spezielle Layout-XML-Datei nur für die Funkgruppe erstellen, damit Sie R.id. * -IDs zuweisen können zu den Knöpfen.
Bitte lesen Sie die Antwort unten, wenn Sie tatsächlich die Optionsfeldgruppe nach Index festlegen möchten, siehe die Antwort unten.
Hallo, ich habe sie programmgesteuert mit diesem Code erstellt: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Inflate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad
Da Sie ihre IDs in lookupTypes auf den Index setzen, können Sie diesen Index einfach als Argument für die checkMethode verwenden.
JJM
Diese Antwort erklärt buchstäblich nur noch einmal, was der Fragesteller bereits gesagt hat - die andere Antwort sollte die akzeptierte Antwort sein, da sie korrekt angibt, wie sie anhand des Index ausgewählt werden soll.
Lassi Kinnunen
@LassiKinnunen Ich glaube, die Anzahl der Upvotes zu dieser Antwort deutet darauf hin, dass die Leute das bekommen, was sie brauchen ... das heißt, Sie haben Recht, dass die andere Antwort für die gestellte Frage korrekter ist: - /
jjm
2
Ehrlich gesagt ist es mir ein bisschen peinlich, dass dies meine am höchsten bewertete SO-Antwort ist.
JJM
86
Die Frage lautete "Set selected INDEX". Hier erfahren Sie, wie Sie es nach Index einstellen:
Zusätzliche Informationen: Google möchte anscheinend, dass Sie ID anstelle von Index verwenden, da die Verwendung von ID fehlerfreier ist. Wenn Sie beispielsweise ein anderes UI-Element in Ihrer RadioGroup haben oder wenn ein anderer Entwickler die RadioButtons neu bestellt, ändern sich die Indizes möglicherweise und entsprechen nicht Ihren Erwartungen. Aber wenn Sie der einzige Entwickler sind, ist dies völlig in Ordnung.
Können Sie diesen Code erklären, wie es die richtige Antwort ist?
rfornal
1
@rfornal Mit diesem Code können Sie das Optionsfeld nach INDEX und nicht nach Ansichts-ID (z. B. R.id.radioButton1) abrufen und müssen weniger Nachschlagetabellen implementieren, um den Index in die Ansichts-ID zu konvertieren.
Beachten Sie jedoch, dass eine radioGroup andere Ansichten als radioButtons enthalten kann - wie in diesem Beispiel, das unter jeder Auswahl eine schwache Linie enthält.
In diesem Fall würde beispielsweise die Verwendung eines Index von 1 einen Fehler erzeugen. Das Element bei Index 1 ist die erste Trennzeile - kein radioButton. Die radioButtons in diesem Beispiel befinden sich in den Indizes 0, 2, 4, 6.
Das hat bei mir funktioniert, ich habe das Optionsfeld dynamisch von erstellt
privatevoid createRadioButton(){RadioButton[] rb =newRadioButton[5];RadioGroup.LayoutParams layoutParams =newRadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,1.0f);
radioGroup.setOrientation(RadioGroup.HORIZONTAL);for(int ID =0; ID <5; ID++){
rb[ID]=newRadioButton(this);
rb[ID].setLayoutParams(layoutParams);
rb[ID].setText("Button_Text");
radioGroup.addView(rb[ID]);//the RadioButtons are added to the radioGroup instead of the layout}}
Überprüfen Sie nun eine Schaltfläche mit,
int radio_button_Id = radioGroup.getChildAt(index).getId();
radioGroup.check( radio_button_Id );
check
Methode verwenden.Die Frage lautete "Set selected INDEX". Hier erfahren Sie, wie Sie es nach Index einstellen:
........
Zusätzliche Informationen: Google möchte anscheinend, dass Sie ID anstelle von Index verwenden, da die Verwendung von ID fehlerfreier ist. Wenn Sie beispielsweise ein anderes UI-Element in Ihrer RadioGroup haben oder wenn ein anderer Entwickler die RadioButtons neu bestellt, ändern sich die Indizes möglicherweise und entsprechen nicht Ihren Erwartungen. Aber wenn Sie der einzige Entwickler sind, ist dies völlig in Ordnung.
quelle
Siavashs Antwort ist richtig:
Beachten Sie jedoch, dass eine radioGroup andere Ansichten als radioButtons enthalten kann - wie in diesem Beispiel, das unter jeder Auswahl eine schwache Linie enthält.
In diesem Fall würde beispielsweise die Verwendung eines Index von 1 einen Fehler erzeugen. Das Element bei Index 1 ist die erste Trennzeile - kein radioButton. Die radioButtons in diesem Beispiel befinden sich in den Indizes 0, 2, 4, 6.
quelle
Sie können findViewById in der Radiogruppe finden.
quelle
Das hat bei mir funktioniert, ich habe das Optionsfeld dynamisch von erstellt
Überprüfen Sie nun eine Schaltfläche mit,
quelle
Setzen Sie in onBindViewHolder das Tag auf Button Group
und im ViewHolder
quelle