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?


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


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>

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>

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

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.



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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.