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.

Hassan Mokdad
quelle

Antworten:

200

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.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
jjm
quelle
2
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:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

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.

Siavash
quelle
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.
Siavash
5

Siavashs Antwort ist richtig:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

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.

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

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.

Alan
quelle
3

Sie können findViewById in der Radiogruppe finden.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`
Faheem
quelle
1

Das hat bei mir funktioniert, ich habe das Optionsfeld dynamisch von erstellt

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(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 );
Mukeshkumar S.
quelle
0

Setzen Sie in onBindViewHolder das Tag auf Button Group

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

und im ViewHolder

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }
Jiten Basnet
quelle