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.
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.
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:
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.
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.
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.
Isso funcionou para mim, criei o botão de opção dinamicamente por
privatevoid createRadioButton(){RadioButton[] rb =newRadioButton[5];RadioGroup.LayoutParams layoutParams =newRadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,1.0f);
radioGroup.setOrientation(RadioGroup.HORIZONTAL);for(int ID =0; ID <5; ID++){
rb[ID]=newRadioButton(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 );
check
método.A pergunta dizia "definir INDEX selecionado", veja como definir por índice:
........
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.
fonte
A resposta de Siavash está correta:
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.
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.
fonte
você pode fazer findViewById no grupo de rádio.
fonte
Isso funcionou para mim, criei o botão de opção dinamicamente por
Agora verifique um botão usando,
fonte
Dentro de onBindViewHolder defina a tag para Grupo de Botões
e no ViewHolder
fonte