Imposta l'indice selezionato di un RadioGroup Android


95

C'è un modo per impostare l'indice selezionato di un RadioGroup in Android, oltre a scorrere i pulsanti radio secondari e selezionare il pulsante di opzione sull'indice selezionato?

Nota: sto compilando il gruppo di pulsanti di opzione in fase di esecuzione.

Risposte:


202

Se il tuo gruppo radio è definito in un file xml di layout, a ogni pulsante può essere assegnato un ID. Quindi devi solo controllare un pulsante come questo

radioGroup.check(R.id.myButtonId);

Se hai creato il tuo gruppo radio in modo programmatico (non sono nemmeno sicuro di come farlo ...), potresti prendere in considerazione la creazione di un file xml di layout speciale solo per il gruppo radio in modo da poter assegnare R.id. * ids ai pulsanti.

Si prega di vedere la risposta di seguito se si sta effettivamente cercando di impostare il gruppo di pulsanti di opzione per indice, vedere la risposta di seguito.

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

2
Ciao, li ho creati programmaticamente usando questo codice: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Infllate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad

Poiché stai impostando i loro ID sull'indice in lookupTypes, puoi semplicemente usare quell'indice come argomento del checkmetodo.
jjm

questa risposta spiega letteralmente ancora una volta ciò che il richiedente ha già affermato - l'altra risposta dovrebbe essere la risposta accettata poiché indica correttamente come selezionare dall'indice.
Lassi Kinnunen

@LassiKinnunen Sento che il numero di voti positivi su questa risposta suggerisce che le persone ottengono ciò di cui hanno bisogno da essa ... detto questo, hai ragione che l'altra risposta è più corretta per la domanda posta: - /
jjm

2
Onestamente mi sento un po 'imbarazzato che questa sia la mia risposta SO più votata.
jjm

86

La domanda diceva "imposta INDICE selezionato", ecco come impostarlo per indice:

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

........

Informazioni aggiuntive: sembra che Google voglia che tu usi id invece di index, perché l'uso di id è più a prova di bug. Ad esempio, se hai un altro elemento dell'interfaccia utente nel tuo RadioGroup, o se un altro sviluppatore riordina i RadioButtons, gli indici potrebbero cambiare e non essere quello che ti aspettavi. Ma se sei l'unico sviluppatore, va benissimo.


Puoi spiegare questo codice, come è la risposta giusta?
rfornal

1
@rfornal questo codice ti consente di afferrare il pulsante di opzione da INDEX, al contrario di View id (come R.id.radioButton1), e riduce la necessità di implementare una tabella di ricerca per convertire l'indice in view id.
Siavash

5

La risposta di Siavash è corretta:

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

Ma tieni presente che un radioGroup può contenere visualizzazioni diverse da radioButtons, come questo esempio che include una linea debole sotto ogni scelta.

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

In questo caso, l'utilizzo di un indice di 1, ad esempio, genererebbe un errore. L'elemento all'indice 1 è la prima riga di separazione, non un radioButton. I radioButtons in questo esempio sono agli indici 0, 2, 4, 6.


3

puoi fare findViewById dal gruppo radio.

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

1

Questo ha funzionato Per me, ho creato il pulsante di opzione in modo dinamico da

  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
    }
}

Ora controlla un pulsante usando,

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

radioGroup.check( radio_button_Id );

0

All'interno di onBindViewHolder impostare il tag su Button Group

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

e nel 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()
    }
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.