Establecer el índice seleccionado de un grupo de radio Android

95

¿Hay alguna forma de establecer el índice seleccionado de un RadioGroup en Android, además de recorrer los botones de radio secundarios y seleccionar marcando el botón de radio en el índice seleccionado?

Nota: estoy completando el grupo de botones de opción en tiempo de ejecución.

Hassan Mokdad
fuente

Respuestas:

202

Si su grupo de radio está definido en un archivo XML de diseño, a cada botón se le puede asignar una identificación. Entonces simplemente marque un botón como este

radioGroup.check(R.id.myButtonId);

Si creó su grupo de radio mediante programación (ni siquiera estoy seguro de cómo lo hace ...), es posible que desee considerar la creación de un archivo xml de diseño especial solo para el grupo de radio para que pueda asignar R.id. * ids a los botones.

Consulte la respuesta a continuación si, de hecho, desea establecer el grupo de botones de opción por índice, consulte la respuesta a continuación.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
jjm
fuente
2
Hola, los creé programáticamente usando este código: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Inflate (R.layout.tmpltradiobutton, nulo); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad
Dado que está configurando sus identificadores en el índice en lookupTypes, puede usar ese índice como argumento para el checkmétodo.
jjm
esta respuesta literalmente simplemente explica nuevamente lo que el autor de la pregunta ya dijo: la otra respuesta debe ser la respuesta aceptada, ya que dice correctamente cómo seleccionar por índice.
Lassi Kinnunen
@LassiKinnunen Siento que la cantidad de votos a favor en esta respuesta sugiere que las personas obtienen lo que necesitan de ella ... Dicho esto, tienes razón en que la otra respuesta es más correcta para la pregunta: - /
jjm
2
Honestamente, me siento un poco avergonzado de que esta sea mi respuesta SO más votada.
jjm
86

La pregunta decía "establecer ÍNDICE seleccionado", así es como se configura por índice:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

Información adicional: parece que Google quiere que uses id en lugar de index, porque usar id es más a prueba de errores. Por ejemplo, si tiene otro elemento de interfaz de usuario en su RadioGroup, o si otro desarrollador reordena los RadioButtons, los índices pueden cambiar y no ser lo que esperaba. Pero si eres el único desarrollador, está bien.

Siavash
fuente
¿Puede explicar este código, cómo es la respuesta correcta?
rfornal
1
@rfornal este código le permite tomar el botón de radio por ÍNDICE, en lugar de por Id. de vista (como R.id.radioButton1), y reduce la necesidad de implementar una tabla de búsqueda para convertir el índice en Id. de vista.
Siavash
5

La respuesta de Siavash es correcta:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

Pero tenga en cuenta que un radioGroup puede contener vistas distintas de radioButtons, como este ejemplo, que incluye una línea tenue debajo de cada opción.

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

En este caso, usar un índice de 1, por ejemplo, generaría un error. El elemento en el índice 1 es la primera línea de separación, no un radioButton. Los radioButtons en este ejemplo están en los índices 0, 2, 4, 6.

Alan
fuente
3

puede hacer findViewById desde el grupo de radio.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`
Faheem
fuente
1

Esto funcionó para mí, creé el botón de radio dinámicamente por

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

Ahora marque un botón usando,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );
Mukeshkumar S
fuente
0

Dentro de onBindViewHolder establece la etiqueta en Grupo de botones

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

y en ViewHolder

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }
Jiten Basnet
fuente