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.

John Boker
quelle

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();
BP.
quelle
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()));
source.rar
quelle
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
    }
}
Stefan Bossbaly
quelle
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);
            }
        });
Nooh
quelle
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());
Marco Fantasia
quelle
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);
Jhoe-mar Pagao
quelle
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();
Shinz6
quelle
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!

ravid rinek
quelle
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();
     }
  });
Vikash Sharma
quelle
2
 int index_selected = radio_grp.indexOfChild(radio_grp
                .findViewById(radio_grp.getCheckedRadioButtonId()));
Prashant Maheshwari Andro
quelle
2

benutze einfach das:

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

du kannst tun

findViewById

von der Radiogruppe.

Hier ist es Beispiel:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);
Faheem
quelle
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);
Andrea Gurioli
quelle
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
}
Tarek360
quelle
0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)
Anand Kumar
quelle
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();
        }
    });
Meysam Keshvari
quelle