¿Cómo configurar el botón de opción marcado como predeterminado en radiogroup?

132

He creado RadioGroupy RadioButtondinámicamente de la siguiente manera:

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

Aquí las radioBtn2.setChecked(true);causas de paso radioBtn2siempre se verifican. Eso significa que no puedo desmarcar radioBtn2marcando otros dos botones de opción ( radioBtn1, radioBtn3). Quiero hacer que RadioGroupsolo pueda marcar un botón de radio a la vez (ahora puede marcar dos botones de radio a la vez).

¿Como puedó resolver esté problema?

Arenoso
fuente
¿Necesitas dinámicamente?
vk hooda

Respuestas:

217

debe verificar el botón de radio en el grupo de radio de esta manera:

radiogroup.check(IdOfYourButton)

Por supuesto, primero tiene que configurar una identificación para sus botones de radio

EDITAR: lo olvidé, radioButton.getId()funciona también, gracias Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

funciona en radiogroup xml

Sprigg
fuente
39
o si no desea identificarlo RadioButtony conoce el índice que puede usar ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali
17
No deberías hacer eso. Eso provocará el problema "setChecked" descrito en esta pregunta. Por supuesto, hay formas de hacerlo sin los identificadores de sus botones, pero por favor no utilizando setChecked() One way would be radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())o algo así
Sprigg
1
es bueno no olvidar agregar el botón de radio al grupo de botones de radio antes de llamar a group.check (button.getId ())
tom
1
Tenía que hacerlo de esta manera: radioGroup.Check(radioGroup.GetChildAt(0).Id);para Xamarin. Usuarios de Android
Mario Galván
112

En caso de que el atributo xml sea el android:checkedButtonque toma el idde RadioButtonser verificado.

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
HierroFlor
fuente
50

En el archivo XML, configure el android:checkedButtoncampo en su RadioGroup, con la identificación de su valor predeterminado RadioButton:

<RadioGroup
    ....
    android:checkedButton="@+id/button_1">

    <RadioButton
        android:id="@+id/button_1"
        ...../>

    <RadioButton
        android:id="@+id/button_2"
        ...../>

    <RadioButton
        android:id="@+id/button_3"
        ...../>
</RadioGroup>
Sara
fuente
20
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());
Ramesh Solanki
fuente
6
RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);
Anuj Oscar
fuente
Lo importante es usar setChecked()después de que todos los botones de radio se hayan agregado al grupo de radio. Entonces, radioGroup.check(radioBtn2.getId())no es necesario
Hartmut Pfitzinger
3

Hubo el mismo problema en el código de mi colega. Esto suena ya que su Grupo de Radio no está configurado correctamente con sus Botones de Radio. Esta es la razón por la que puede seleccionar varios botones de radio. Intenté muchas cosas, finalmente hice un truco que en realidad está mal, pero funciona bien.

for ( int i = 0 ; i < myCount ; i++ )
{
    if ( i != k )
    {
        System.out.println ( "i = " + i );
        radio1[i].setChecked(false);
    }
}

Aquí configuro uno para el bucle, que comprueba los botones de radio disponibles y anula la selección de todos, excepto el nuevo clic. intentalo.

Lucifer
fuente
1

Agregue android:checked = "true"su actividad.xml

Leotrim Vojvoda
fuente
0

Es un error de RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 sin viewId, y generateViewId está en onChildViewAdded ()

public void onChildViewAdded(View parent, View child) {
    if (parent == RadioGroup.this && child instanceof RadioButton) {
        int id = child.getId();
        // generates an id if it's missing
        if (id == View.NO_ID) {
            id = View.generateViewId();
            child.setId(id);
        }
        ((RadioButton) child).setOnCheckedChangeWidgetListener(
                mChildOnCheckedChangeListener);
    }

    if (mOnHierarchyChangeListener != null) {
        mOnHierarchyChangeListener.onChildViewAdded(parent, child);
    }
}

entonces, primero radioGroup.addView (radioBtn2), luego radioBtn2.setChecked (true);

Me gusta esto:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

radioBtn2.setChecked(true);
qinmiao
fuente