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?


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


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>

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>

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

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

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.



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