2012-02-07 7 views
104

ho creato RadioGroup e RadioButton dinamicamente come seguecome impostare pulsante controllato in modo predefinito in RadioGroup con Android

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 passo radioBtn2.setChecked(true); provoca radioBtn2 sempre controllato. Ciò significa che non è possibile deselezionare radioBtn2 controllando altri due pulsanti di opzione (radioBtn1, radioBtn3). Voglio fare in modo che RadioGroup possa controllare un solo pulsante radio alla volta (ora può controllare due pulsanti radio alla volta). Come posso risolvere questo problema?

+0

è lì è necessario in modo dinamico ??? –

risposta

167

si dovrebbe verificare il pulsante radio nella RadioGroup come questo:

radiogroup.check(IdOfYourButton)

Naturalmente bisogna prima impostare un Id ai vostri radiobuttons

edit: ho dimenticato, radioButton.getId() funziona così, grazie Ramesh

+32

o se non vuoi id il tuo 'RadioButton' e conosci l'indice puoi usare ** ((RadioButton) radioGroup.getChildAt (INDICE)). SetChecked (true); ** –

+16

Non dovresti farlo . Ciò causerà il problema "setChecked" descritto in questa domanda. Naturalmente ci sono modi per farlo senza ids dei tuoi pulsanti, ma per favore non usando 'setChecked()' Un modo sarebbe 'radiogroup.check (((RadioButton) radioGroup.getChildAt (INDICE)). getId()) 'o qualcosa di simile – Sprigg

+0

buono per non dimenticare di aggiungere il pulsante di opzione al gruppo di pulsanti di opzione _prima_ chiamando group.check (button.getId()) – tom

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

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

Qui ho impostato uno per ciclo, che controlla i pulsanti di opzione disponibili e deseleziona tutti tranne il nuovo clic. Provalo.

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

L'importante è usare 'setChecked()' dopo che tutti i pulsanti radio sono stati aggiunti al gruppo radio. Quindi, 'radioGroup.check (radioBtn2.getId())' non è necessario –

93

In caso XML attribuiscono la sua android:checkedButton che prende il id del RadioButton da controllare.

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

Nel file XML impostare il campo android:checkedButton nel vostro RadioGroup, con l'id della vostra 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> 
0

Si tratta di 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, primo radioGroup.addView (radioBtn2), quindi radioBtn2.setChecked (true);

Ti piace questa:

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

Aggiungere android:checked = "true" nel activity.xml

Problemi correlati