So erhalten Sie den ausgewählten Index einer RadioGroup in Android


213

Gibt es eine einfache Möglichkeit, den ausgewählten Index einer RadioGroup in Android abzurufen, oder muss ich OnCheckedChangeListener verwenden, um auf Änderungen zu warten und etwas zu haben, das den zuletzt ausgewählten Index enthält?

Beispiel xml:

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <RadioButton android:id="@+id/radio1" android:text="option 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio2" android:text="option 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio3" android:text="option 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio4" android:text="option 4" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio5" android:text="option 5" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RadioGroup>

Wenn ein Benutzer auswählt, option 3dass ich den Index erhalten möchte, 2.

Antworten:


479

Sie sollten in der Lage sein, so etwas zu tun:

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

Wenn die RadioGroupandere Ansichten enthält (wie a TextView), gibt die indexOfChild()Methode einen falschen Index zurück.

So erhalten Sie den ausgewählten RadioButtonText auf RadioGroup:

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();

11
Was aber, wenn für diese Schaltflächen keine android:idAttribute festgelegt sind?
Neuront

@ BP Ich habe den gleichen Zweifel beim Zugriff auf Optionsfelder, wenn weder die übergeordnete noch die Optionsfeld-ID festgelegt ist.
Killer

2
@neuront Solange Sie radioGroup.findViewById (radioButtonID) ausführen, funktioniert es. RadioGroup setzt 1, 2, 3, 4 usw. als IDs der Ansicht. Wenn Sie also innerhalb des Kontexts nach ihnen suchen, funktioniert dies
Reinherd,

Dies funktioniert nicht, wenn standardmäßig (und vom Benutzer unberührt) RadioButton eingestellt ist.
Ninja Coding

2
@NinjaCoding Wenn Sie den gleichen Fehler wie ich gemacht haben, müssen Sie das Standard-Optionsfeld (initial) festlegen, indem Sie radioGroup.check (selectedRadioButton.id) und nicht radioButton.setChecked (true) aufrufen.
Lensflare

108

Das sollte funktionieren,

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));

5
Verwenden Sie getActivity (). FindViewById (), wenn Sie im Fragment verwenden.
Sanjeet A

56

Sie können einen Verweis auf die Optionsgruppe haben und getCheckedRadioButtonId ()die aktivierte Optionsfeld-ID abrufen. Schauen Sie hier

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radio_group);

Dann, wenn Sie die ausgewählte Radiooption erhalten müssen.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}

Ja, dies ist die ID des aktivierten Optionsfelds, aber was ist mit dem Index des Optionsfelds in der Optionsgruppe?
John Boker

Ich kann die ID bekommen, ich will den Index, sie sind unterschiedlich.
John Boker

Was meinst du mit Index? ist es in einer Listenansicht?
Stefan Bossbaly

Wenn ich 5 Radiobuttons in der Radiogruppe habe und der Benutzer den dritten auswählt, den ich erhalten möchte, 2, den Index des ausgewählten Radiobuttons in der Radiogruppe. Dies ist keine Listenansicht.
John Boker

Nur um zu klären, ob der Benutzer die dritte Schaltfläche auswählt, möchten Sie die zweite erhalten? Radiogruppen und Schaltflächen haben keine Indizes.
Stefan Bossbaly

27

Versuche dies

        RadioGroup  group= (RadioGroup) getView().findViewById(R.id.radioGroup);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                View radioButton = radioGroup.findViewById(i);
                int index = radioGroup.indexOfChild(radioButton);
            }
        });

Das funktioniert! Aber ich kann nicht verstehen, warum wir diese "radioButton" -Ansicht verwenden müssen.
AlexS


9

Sie können verwenden:

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());

6

// benutze, um die ID des ausgewählten Elements zu erhalten

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// Ruft die Ansicht des ausgewählten Elements ab

View selectedView = (View)findViewById( selectedID);

6

Auf diese Weise hat es perfekt für mich funktioniert:

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
    int radioButtonID = radioGroup.getCheckedRadioButtonId();
    RadioButton radioButton = (RadioButton) radioGroup.findViewById(radioButtonID);
    String selectedtext = (String) radioButton.getText();

5

Sie müssen lediglich zuerst Werte für Ihren RadioButton festlegen, zum Beispiel:

RadioButton radioButton = (RadioButton)findViewById(R.id.radioButton);      
radioButton.setId(1);        //some int value

und wann immer dieser räumliche radioButton ausgewählt wird, können Sie seinen Wert anhand der ID abrufen, mit der Sie ihn angegeben haben

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);                     
int whichIndex = radioGroup.getCheckedRadioButtonId(); //of course the radioButton
                                                       //should be inside the "radioGroup"
                                                       //in the XML

Prost!


5
radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

  btnDisplay=(Button)findViewById(R.id.button);

  btnDisplay.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        int selectedId=radioSexGroup.getCheckedRadioButtonId();
        radioSexButton=(RadioButton)findViewById(selectedId);
        Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
     }
  });


2

benutze einfach das:

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();

1

du kannst tun

findViewById

von der Radiogruppe.

Hier ist es Beispiel:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);

1

Sie können einfach

-deklarieren Sie die Radiogruppe und ein Optionsfeld aus der onCreate-Methode

private RadioGroup GrupName;
private RadioButton NameButton;

-Stellen Sie die Ansichts-ID in der onCreate-Methode ein

GrupName = (RadioGroup) findViewById(R.id.radioGroupid);

-Nehmen Sie die mit ausgewählte Radiobutton-ID

int id = GroupName.getCheckedRadioButtonId();

-Verwenden Sie die ID, um mit der ausgewählten Schaltfläche übereinzustimmen

NameButton = (RadioButton) findViewById(id);

- Endlich den Wert des Optionsfelds abrufen

String valueExpected = NameButton.getText().toString();

--- PS: WENN SIE EINEN INT-WERT WOLLEN, KÖNNEN SIE ES Gießen

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Hier ist eine Kotlin- Erweiterung, um die richtige Position zu erhalten, auch wenn Ihre Gruppe eine Textansicht oder einen Nicht-RadioButton enthält.

fun RadioGroup.getCheckedRadioButtonPosition(): Int {
    val radioButtonId = checkedRadioButtonId
    return children.filter { it is RadioButton }
        .mapIndexed { index: Int, view: View ->
            index to view
        }.firstOrNull {
            it.second.id == radioButtonId
        }?.first ?: -1
}

0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)

0
radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnDisplay.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // get selected radio button from radioGroup
            int selectedId = radioSexGroup.getCheckedRadioButtonId();
            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
        }
    });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.