Come ottenere l'indice selezionato di un RadioGroup in Android


213

C'è un modo semplice per ottenere l'indice selezionato di un RadioGroup in Android o devo usare OnCheckedChangeListener per ascoltare le modifiche e avere qualcosa che contiene l'ultimo indice selezionato?

esempio 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>

se un utente seleziona option 3Voglio ottenere l'indice, 2.

Risposte:


479

Dovresti essere in grado di fare qualcosa del genere:

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

Se RadioGroupcontiene altre viste (come a TextView), il indexOfChild()metodo restituirà un indice errato.

Per ottenere il RadioButtontesto selezionato su RadioGroup:

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

11
Ma cosa succede se quei pulsanti non hanno i loro android:idattributi impostati?
neuront,

@BP ho lo stesso dubbio nell'accedere ai pulsanti di opzione quando nessuno dei genitori o l'ID dei pulsanti di opzione è impostato.
Killer

2
@neuront Fintanto che fai radioGroup.findViewById (radioButtonID) funzionerà. RadioGroup imposta 1, 2, 3, 4 e così via come ID della vista, quindi se li cerchi nel suo contesto, funzionerà
Reinherd,

Questo non funziona se RadioButton predefinito (e non toccato dall'utente) è impostato.
Ninja Coding,

2
@NinjaCoding Se hai commesso lo stesso errore, devi impostare il pulsante di opzione (iniziale) predefinito chiamando radioGroup.check (selectedRadioButton.id), non radioButton.setChecked (true).
Lensflare,

108

Questo dovrebbe funzionare,

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

5
Utilizzare getActivity (). FindViewById () se si utilizza nel frammento.
Sanjeet,

56

È possibile avere un riferimento al gruppo radio e utilizzare getCheckedRadioButtonId ()per ottenere l'id del pulsante di opzione selezionato. Dai un'occhiata qui

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

Quindi, quando è necessario ottenere l'opzione radio selezionata.

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

sì, questo è l'ID del pulsante di opzione selezionato, ma per quanto riguarda l'indice del pulsante di opzione nel gruppo radio?
John Boker,

posso ottenere l'id, voglio l'indice, sono diversi.
John Boker,

cosa intendi per indice? è in una vista elenco?
Stefan Bossbaly,

se ho 5 pulsanti radio nel radiogruppo e l'utente seleziona il 3o voglio ottenere 2, l'indice del pulsante radio selezionato nel radiogruppo. questa non è una lista.
John Boker,

solo per chiarire se l'utente seleziona il 3 ° pulsante che vuoi ottenere il 2 °? i gruppi radio e i pulsanti non hanno indici.
Stefan Bossbaly,

27

prova questo

        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);
            }
        });

Questo funziona! Ma non riesco a capire perché dobbiamo usare questa vista "radioButton".
AlexS,


9

Puoi usare:

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

6

// usa per ottenere l'id dell'elemento selezionato

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// ottiene la vista dell'elemento selezionato

View selectedView = (View)findViewById( selectedID);

6

Ha funzionato perfettamente per me in questo modo:

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

5

Tutto ciò che serve è impostare prima i valori sul RadioButton, ad esempio:

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

e quindi ogni volta che verrà scelto questo pulsante radio spaziale, puoi estrarre il suo valore dall'ID che gli hai dato

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

Saluti!


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

basta usare questo:

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

1

tu puoi fare

findViewById

dal gruppo radio.

Ecco un esempio:

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

1

Puoi semplicemente

-dichiarare il gruppo radio e un pulsante di opzione fuori dal metodo onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-set l'id di visualizzazione nel metodo onCreate

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

-prendi l'ID del pulsante di opzione selezionato usando

int id = GroupName.getCheckedRadioButtonId();

-utilizzare l'id per abbinare la vista selezionata dal pulsante

NameButton = (RadioButton) findViewById(id);

-finalmente ottenere il valore del pulsante di opzione

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

--- PS: SE VUOI UN VALORE INT, allora puoi lanciarlo

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Ecco un'estensione di Kotlin per ottenere la posizione corretta anche se il tuo gruppo contiene un TextView o qualsiasi pulsante non RadioButton.

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();
        }
    });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.