Como definir o botão de opção marcado como padrão no grupo de rádio?

132

Eu criei RadioGroupe RadioButtondinamicamente da seguinte maneira:

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

Aqui, a etapa radioBtn2.setChecked(true);causa radioBtn2sempre verificada. Isso significa que não consigo desmarcar radioBtn2marcando outros dois botões de opção ( radioBtn1, radioBtn3). Quero fazer com que seja RadioGrouppossível verificar apenas um botão de opção de cada vez (agora pode verificar dois botões de opção por vez).

Como posso resolver este problema?

Sandy
fonte
existe lá você precisa dinamicamente ???
precisa saber é o seguinte

Respostas:

217

você deve verificar o botão de opção no grupo de opções da seguinte maneira:

radiogroup.check(IdOfYourButton)

Claro que você primeiro precisa definir um ID nos botões de opção

EDIT: esqueci, radioButton.getId()funciona também, thx Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

trabalha no radiogroup xml

Sprigg
fonte
39
ou se você não deseja identificar o seu RadioButtone conhece o índice que pode usar ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali
17
Você não deveria fazer isso. Isso causará o problema "setChecked" descrito nesta pergunta. Claro que existem maneiras de fazer isso sem ids de seus botões, mas por favor, não usando setChecked() Uma forma seria radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())ou algo parecido
Sprigg
1
bom não esquecer de adicionar o botão de opção ao grupo de botões de opção antes de chamar group.check (button.getId ())
tom
1
Eu tive que fazer desta maneira: radioGroup.Check(radioGroup.GetChildAt(0).Id);para usuários do Xamarin.Android
Mario Galván
112

No caso do atributo xml, é android:checkedButtonnecessário que ido valor RadioButtonseja verificado.

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

No arquivo XML, defina o android:checkedButtoncampo no seu RadioGroup, com o ID do seu padrão 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>
Sara
fonte
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());
Ramesh Solanki
fonte
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);
Anuj Oscar
fonte
O importante é usar setChecked()depois que todos os botões de opção forem adicionados ao grupo de opções. Então, radioGroup.check(radioBtn2.getId())não é necessário marcar
Hartmut Pfitzinger
3

Havia o mesmo problema no código do meu colega. Parece que o seu grupo de rádio não está definido corretamente com os botões de opção. É por isso que você pode selecionar vários botões de opção. Eu tentei muitas coisas, finalmente eu fiz um truque que está errado, na verdade, mas funciona bem.

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

Aqui, defino um loop for, que verifica os botões de opção disponíveis e desmarca todos, exceto o novo clique. tente.

Lúcifer
fonte
1

Adicione android:checked = "true"sua activity.xml

Leotrim Vojvoda
fonte
0

É um bug do RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 sem viewId e generateViewId está em 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);
    }
}

então, primeiro radioGroup.addView (radioBtn2), depois radioBtn2.setChecked (true);

Como isso:

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