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.

John Boker
fuente

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();
BP.
fuente
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()));
source.rar
fuente
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
    }
}
Stefan Bossbaly
fuente
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);
            }
        });
Nooh
fuente
Esto es funciona! Pero no puedo entender por qué necesitamos usar esta vista "radioButton".
AlexS
9

Puedes usar:

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());
Marco Fantasia
fuente
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);
Jhoe-mar Pagao
fuente
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();
Shinz6
fuente
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!

Ravid Rinek
fuente
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
fuente
2
 int index_selected = radio_grp.indexOfChild(radio_grp
                .findViewById(radio_grp.getCheckedRadioButtonId()));
Prashant Maheshwari Andro
fuente
2

solo usa esto:

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

tu puedes hacer

findViewById

del grupo de radio.

Aquí está la muestra:

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

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)
Anand Kumar
fuente
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
fuente