Cómo obtener el índice seleccionado de un RadioGroup en Android


213

¿Hay una manera fácil de obtener el índice seleccionado de un RadioGroup en Android o tengo que usar OnCheckedChangeListener para escuchar los cambios y tener algo que contenga el último índice seleccionado?

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

si un usuario selecciona option 3Quiero obtener el índice, 2.

Respuestas:


479

Deberías poder hacer algo como esto:

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

Si RadioGroupcontiene otras vistas (como a TextView), el indexOfChild()método devolverá un índice incorrecto.

Para obtener el RadioButtontexto seleccionado en RadioGroup:

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

11
Pero, ¿qué pasa si esos botones no tienen sus android:idatributos establecidos?
neuront

@BP Tengo la misma duda al acceder a los botones de radio cuando ninguno de los padres o la identificación de los botones de radio está configurada.
Killer

2
@neuront Siempre que lo haga radioGroup.findViewById (radioButtonID) funcionará. RadioGroup establece 1, 2, 3, 4, etc. como ID de vista, por lo que si los busca dentro de su contexto, funcionará
Reinherd

Esto no funciona si el RadioButton está configurado por defecto (y no ha sido tocado por el Usuario).
Ninja Coding

2
@NinjaCoding Si cometió el mismo error que yo, debe configurar el botón de opción predeterminado (inicial) llamando a radioGroup.check (selectedRadioButton.id), no a radioButton.setChecked (verdadero).
Lensflare

108

Esto debería funcionar,

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

55
Use getActivity (). FindViewById () si lo está usando en el Fragmento.
Sanjeet A

56

Puede tener una referencia al grupo de radio y usar getCheckedRadioButtonId ()para obtener la identificación del botón de radio marcada. Mira aquí

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

Luego, cuando necesite obtener la opción de radio seleccionada.

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

sí, esta es la identificación del botón de radio marcado, pero ¿qué pasa con el índice del botón de radio en el grupo de radio?
John Boker

Puedo obtener la identificación, quiero el índice, son diferentes.
John Boker

¿Qué quieres decir con índice? ¿Está en una vista de lista?
Stefan Bossbaly

si tengo 5 botones de radio en el grupo de radio y el usuario selecciona el tercero que quiero obtener 2, el índice del botón de radio seleccionado en el grupo de radio. Esto no es una vista de lista.
John Boker

solo para aclarar si el usuario selecciona el tercer botón que desea obtener el segundo? Los grupos de radio y los botones no tienen índices.
Stefan Bossbaly

27

prueba esto

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

Esto es funciona! Pero no puedo entender por qué necesitamos usar esta vista "radioButton".
AlexS


9

Puedes usar:

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

6

// se usa para obtener la identificación del elemento seleccionado

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// obtener la vista del elemento seleccionado

View selectedView = (View)findViewById( selectedID);

6

Funcionó perfectamente para mí de esta manera:

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

5

Todo lo que necesita es establecer valores primero en su RadioButton, por ejemplo:

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

y luego, cada vez que se elija este radioButton específico, puede extraer su valor por la Id que le dio

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

¡Salud!


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

solo usa esto:

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

1

tu puedes hacer

findViewById

del grupo de radio.

Aquí está la muestra:

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

1

Puedes simplemente

-declarar el grupo de radio y un botón de radio fuera del método onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-configura el id de vista en el método onCreate

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

-Toma la identificación del botón de radio seleccionada usando

int id = GroupName.getCheckedRadioButtonId();

-utiliza la identificación para que coincida con la vista seleccionada con el botón

NameButton = (RadioButton) findViewById(id);

-finalmente obtener el valor del botón de radio

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

--- PD: SI QUIERES UN VALOR INT, LUEGO PUEDES ENVIARLO

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Aquí hay una extensión de Kotlin para obtener la posición correcta incluso si su grupo contiene un TextView o cualquier otro que no sea 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();
        }
    });
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.