Как установить переключатель по умолчанию в радиогруппе?

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 07

Ответы:

218

вы должны проверить радиокнопку в радиогруппе следующим образом:

radiogroup.check(IdOfYourButton)

Конечно, сначала вам нужно установить идентификатор для ваших радиокнопок.

РЕДАКТИРОВАТЬ: я забыл, radioButton.getId()тоже работает, спасибо Рамеш

EDIT2:

android:checkedButton="@+id/my_radiobtn"

работает в радиогруппе xml

Sprigg
источник
39
или если вы не хотите указывать свой идентификатор RadioButtonи знаете индекс, который вы можете использовать ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ахмад Кайяли
17
Вы не должны этого делать. Это вызовет проблему "setChecked", описанную в этом вопросе. Конечно, есть способы сделать это без идентификаторов ваших кнопок, но, пожалуйста, не используйте setChecked() One way radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())или что-то в этом роде
Sprigg
1
хорошо не забыть добавить переключатель в группу переключателей перед вызовом group.check (button.getId ())
том
1
Мне пришлось сделать это так: radioGroup.Check(radioGroup.GetChildAt(0).Id);для пользователей Xamarin.Android
Марио Гальван,
112

В случае , если для атрибута XML его , android:checkedButtonкоторый берет idиз RadioButtonпровериться.

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
IronBlossom
источник
51

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

Здесь я установил один цикл for, который проверяет доступные переключатели и отменяет выбор всех, кроме нового, по которому щелкнули. попытайся.

Люцифер
источник
1

Добавьте android:checked = "true"в свой activity.xml

Леотрим Войвода
источник
0

Это ошибка RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

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

Как это:

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
источник