Jak ustawić przycisk radiowy zaznaczony jako domyślny w grupie radiowej?

132

Stworzyłem RadioGroupi RadioButtondynamicznie:

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

Tutaj radioBtn2.setChecked(true);przyczyny radioBtn2zawsze sprawdzane. Oznacza to, że nie mogę odznaczyć radioBtn2, zaznaczając pozostałe dwa przyciski opcji ( radioBtn1, radioBtn3). Chcę, żeby to RadioGroupmogło sprawdzać tylko jeden przycisk radiowy na raz (teraz może sprawdzać dwa radiobutton na raz).

Jak mogę rozwiązać ten problem?

Piaszczysty
źródło
czy potrzebujesz dynamicznie ???
vk hooda

Odpowiedzi:

219

powinieneś sprawdzić radiobutton w grupie radiowej w ten sposób:

radiogroup.check(IdOfYourButton)

Oczywiście najpierw musisz ustawić identyfikator dla swoich radiobuttons

EDYCJA: zapomniałem, radioButton.getId() działa, dzięki Ramesh

EDYCJA2:

android:checkedButton="@+id/my_radiobtn"

działa w radiogroup xml

Sprigg
źródło
39
lub jeśli nie chcesz identyfikować swojego RadioButtoni znasz indeks, możesz użyć ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali
18
Nie powinieneś tego robić. Spowoduje to problem „setChecked” opisany w tym pytaniu. Oczywiście można to zrobić bez identyfikatorów przycisków, ale proszę nie używać opcji setChecked() One way radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())lub czegoś podobnego
Sprigg
1
dobrze nie zapomnij dodać przycisk opcji do grupy przycisków opcji przed wywołaniem group.check (button.getId ())
tom
1
Musiałem to zrobić w ten sposób: radioGroup.Check(radioGroup.GetChildAt(0).Id);dla użytkowników Xamarin.Android
Mario Galván
112

W przypadku atrybutu xml, android:checkedButtonktóry przyjmuje idelement RadioButtondo sprawdzenia.

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
IronBlossom
źródło
54

W pliku XML ustaw android:checkedButtonpole w swoim RadioGroup, z domyślnym identyfikatorem 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
źródło
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
źródło
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
źródło
Ważne jest, aby użyć go setChecked()po dodaniu wszystkich przycisków opcji do grupy radiowej. Wtedy radioGroup.check(radioBtn2.getId())nie jest to konieczne
Hartmut Pfitzinger
3

W kodzie mojego kolegi był ten sam problem. To brzmi, ponieważ twoja grupa radiowa nie jest poprawnie ustawiona za pomocą przycisków radiowych. To jest powód, dla którego możesz wybrać wiele przycisków opcji. Próbowałem wielu rzeczy, w końcu zrobiłem sztuczkę, która w rzeczywistości jest niewłaściwa, ale działa dobrze.

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

Tutaj ustawiłem pętlę dla pętli, która sprawdza dostępne przyciski radiowe i odznacza każdy z wyjątkiem nowo klikniętego. Spróbuj.

Lucyfer
źródło
1

Dodaj android:checked = "true"swój plik activity.xml

Leotrim Vojvoda
źródło
0

To błąd RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 bez viewId, a generatedViewId jest w 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);
    }
}

więc najpierw radioGroup.addView (radioBtn2), potem radioBtn2.setChecked (true);

Lubię to:

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
źródło