Come impostare il pulsante di opzione selezionato come predefinito nel radiogroup?


132

Ho creato RadioGroupe RadioButtondinamicamente come segue:

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

Qui il passaggio radioBtn2.setChecked(true);causa radioBtn2sempre un controllo. Ciò significa che non posso deselezionare selezionando radioBtn2altri due pulsanti di opzione ( radioBtn1, radioBtn3). Voglio fare in modo che RadioGrouppossa controllare solo un pulsante di opzione alla volta (Ora può controllare due pulsanti di opzione alla volta).

Come posso risolvere questo problema?


c'è che ti serve dinamicamente ???
vk hooda,

Risposte:


217

dovresti controllare il pulsante di opzione nel radiogruppo in questo modo:

radiogroup.check(IdOfYourButton)

Ovviamente devi prima impostare un ID per i tuoi pulsanti radio

EDIT: ho dimenticato, radioButton.getId()funziona anche, grazie Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

funziona in radiogroup xml


39
o se non vuoi identificartiRadioButton e conosci l'indice che puoi usare ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali,

17
Non dovresti farlo. Ciò causerà il problema "setChecked" descritto in questa domanda. Naturalmente ci sono modi per farlo senza ID dei pulsanti, ma per favore non usando setChecked() One way sarebbe radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())o qualcosa del genere
Sprigg

1
bene non dimenticare di aggiungere il pulsante di opzione al gruppo di pulsanti di opzione prima di chiamare group.check (button.getId ())
tom

1
Ho dovuto farlo in questo modo: radioGroup.Check(radioGroup.GetChildAt(0).Id);per gli utenti di Xamarin.Android
Mario Galván,

112

Nel caso attributo XML sua android:checkedButtonche prende il iddella RadioButtonda controllare.

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

50

Nel file XML imposta il android:checkedButtoncampo nel tuo RadioGroup, con l'id predefinito 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>

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

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

L'importante è usare setChecked()dopo aver aggiunto tutti i pulsanti di opzione al gruppo radio. Quindi, radioGroup.check(radioBtn2.getId())non è necessario
Hartmut Pfitzinger,

3

C'era lo stesso problema nel codice del mio collega. Sembra che il tuo gruppo radio non sia impostato correttamente con i tuoi pulsanti radio. Questo è il motivo per cui è possibile selezionare più pulsanti di opzione. Ho provato molte cose, finalmente ho fatto un trucco che in realtà è sbagliato, ma funziona bene.

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

Qui ne ho impostato uno per il loop, che controlla i pulsanti di opzione disponibili e deseleziona tutti tranne quello nuovo cliccato. Provalo.



0

È un bug di RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 senza viewId e generateViewId è in 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);
    }
}

quindi, prima radioGroup.addView (radioBtn2), quindi radioBtn2.setChecked (true);

Come questo:

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