Як встановити перевірену радіо кнопку як за замовчуванням у радіогрупі?


132

Я створив RadioGroupі RadioButtonдинамічно наступним чином:

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

Тут крок radioBtn2.setChecked(true);причин radioBtn2завжди перевіряється. Це означає, що я не можу зняти прапорець radioBtn2, перевіривши інші дві радіо кнопки ( radioBtn1, radioBtn3). Я хочу зробити так, щоб RadioGroupможна було перевірити лише одну перемикач одночасно (тепер вона може перевіряти дві радіо кнопки одночасно).

Як я можу вирішити цю проблему?


є вам динамічно потрібно ???
vk hooda

Відповіді:


217

ви повинні перевірити радіо-кнопку в радіогрупі так:

radiogroup.check(IdOfYourButton)

Звичайно, спочатку потрібно встановити Id для ваших радіо кнопок

EDIT: я забув, radioButton.getId()працює також, thx Рамеш

EDIT2:

android:checkedButton="@+id/my_radiobtn"

працює в радіогрупі xml


39
або якщо ви не хочете ідентифікувати свій RadioButtonі вам відомий індекс, ви можете використовувати ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (вірно);
Ахмад Каялі

17
Ти не повинен цього робити. Це спричинить проблему "setChecked", описану в цьому питанні. Звичайно, є способи зробити це без ідентифікаторів ваших кнопок, але, будь ласка, не скористайтеся setChecked() одним із способів - radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())чи щось подібне
Sprigg

1
добре не забути додати перемикач до групи перемикачів перед тим, як зателефонувати group.check (button.getId ())
Tom

1
Мені довелося це зробити так: radioGroup.Check(radioGroup.GetChildAt(0).Id);для користувачів Xamarin.Android
Маріо Гальван

112

У разі , якщо для атрибуту XML його , android:checkedButtonякий бере idз RadioButtonперевіритися.

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

50

У файлі XML встановіть android:checkedButtonполе у ​​своєму RadioGroupідентифікаторі за замовчуванням 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);

Важливим є використання setChecked()після додавання всіх радіо кнопок до радіогрупи. Тоді, radioGroup.check(radioBtn2.getId())не потрібно
Хартмут Пфітцингер

3

У коді мого колеги була така ж проблема. Це звучить, коли ваша радіогрупа неправильно налаштована за допомогою кнопок радіо. Саме тому ви можете багаторазово вибирати перемикачі. Я спробував багато речей, нарешті я зробив трюк, який насправді неправильний, але працює чудово.

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

Тут я встановив цикл для циклу, який перевіряє наявність радіо кнопок і вибирає кожну, за винятком нової, яку натиснув. Спробуй це.



0

Це помилка RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 без viewId, а createViewId знаходиться в 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);
    }
}

так, спочатку radioGroup.addView (radioBtn2), потім radioBtn2.setChecked (вірно);

Подобається це:

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.