Definir o índice selecionado de um Android RadioGroup


95

Existe uma maneira de definir o índice selecionado de um RadioGroup no android, diferente de percorrer os botões de rádio filhos e selecionar a verificação do botão de opção no índice selecionado?

Observação: estou preenchendo o grupo de botões de opção em tempo de execução.

Respostas:


202

Se o seu grupo de rádio for definido em um arquivo xml de layout, cada botão pode receber um id. Então você apenas marca um botão como este

radioGroup.check(R.id.myButtonId);

Se você criou seu grupo de rádio programaticamente (nem tenho certeza de como você faz isso ...), você pode querer considerar a criação de um arquivo xml de layout especial apenas para o grupo de rádio para que possa atribuir R.id. * ids para os botões.

Por favor, veja a resposta abaixo se você está, de fato, tentando definir o grupo de botão de opção por índice, veja a resposta abaixo.

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

2
Olá, eu os criei programaticamente 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, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad

Já que você está definindo seus ids para o índice em lookupTypes, você pode simplesmente usar esse índice como o argumento para o checkmétodo.
jjm

essa resposta literalmente apenas explica novamente o que o autor da pergunta já afirmou - a outra resposta deve ser a resposta aceita, pois diz corretamente como selecionar pelo índice.
Lassi Kinnunen,

@LassiKinnunen Eu sinto que o número de votos positivos nesta resposta sugere que as pessoas estão obtendo o que precisam ... Dito isso, você está certo de que a outra resposta é mais correta para a pergunta feita: - /
jjm

2
Honestamente, sinto-me um pouco envergonhado por esta ser a minha resposta mais votada.
jjm

86

A pergunta dizia "definir INDEX selecionado", veja como definir por índice:

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

........

Informação adicional: Parece que o Google quer que você use id em vez de índice, porque usar id é mais à prova de bug. Por exemplo, se você tiver outro elemento de UI em seu RadioGroup, ou se outro desenvolvedor reordenar os RadioButtons, os índices podem mudar e não ser o que você esperava. Mas se você for o único desenvolvedor, tudo bem.


Você pode explicar este código, como é a resposta certa?
rfornal de

1
@rfornal, esse código permite que você pegue o botão de opção por INDEX, ao contrário de View id (como R.id.radioButton1), e reduz a necessidade de implementar uma tabela de pesquisa para converter índice em view id.
Siavash

5

A resposta de Siavash está correta:

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

Mas esteja ciente de que um radioGroup pode conter visualizações diferentes de radioButtons - como este exemplo, que inclui uma linha esmaecida em cada opção.

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

Nesse caso, usar um índice de 1, por exemplo, geraria um erro. O item no índice 1 é a primeira linha separadora - não um radioButton. Os radioButtons neste exemplo estão nos índices 0, 2, 4, 6.


3

você pode fazer findViewById no grupo de rádio.

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

1

Isso funcionou para mim, criei o botão de opção dinamicamente 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
    }
}

Agora verifique um botão usando,

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

radioGroup.check( radio_button_Id );

0

Dentro de onBindViewHolder defina a tag para Grupo de Botões

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

e no 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()
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.