Подтвердить что ты не робот

RadioGroup: как программно проверить

Я создаю RadioGroup из XML

    <RadioGroup android:id="@+id/option" 
        android:layout_width="match_parent"
        android:orientation="horizontal" 
        android:checkedButton="@+id/block_scenario_off"
        android:layout_height="wrap_content">
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option1" 
            android:layout_height="wrap_content" 
            android:id="@+id/option1"
            android:layout_gravity="center|left" 
            android:onClick="@string/on_click"/>
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option2" 
            android:onClick="@string/on_click"
            android:layout_height="wrap_content"
            android:layout_gravity="center" 
            android:id="@+id/option2"/>
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option3"
            android:onClick="@string/on_click" 
            android:layout_height="wrap_content"
            android:layout_gravity="center|right" 
            android:id="@+id/option3" />
    </RadioGroup>

В Java-коде я программно проверяю первый на создании активности (onCreate()) следующим образом:

    mOption = (RadioGroup) findViewById(R.id.option);
    mOption.check(R.id.option1);

Но когда отображается действие, никакой переключатель не установлен. Любая помощь?

4b9b3361

Ответ 1

В вашем макете вы можете добавить android:checked="true" в CheckBox, который вы хотите выбрать.

Или программно вы можете использовать метод setChecked, определенный в проверяемом интерфейсе:

RadioButton b = (RadioButton) findViewById(R.id.option1); b.setChecked(true);

Ответ 2

Вам может потребоваться объявить радиокнопки в методе onCreate вашего кода и использовать их.

RadioButton rb1 = (RadioButton) findViewById(R.id.option1);
rb1.setChecked(true);

Ответ 3

попробуйте это   если вы хотите, чтобы ваш переключатель был проверен на основе значения некоторой переменной, например. "genderStr", то вы можете использовать следующий фрагмент кода

    if(genderStr.equals("Male"))
       genderRG.check(R.id.maleRB);
    else 
       genderRG.check(R.id.femaleRB);

Ответ 4

Возьмите радиогруппу и посмотрите на детей, чтобы убедиться, что они не отмечены.

RadioGroup rg = (RadioGroup) view;
int checked = savedInstanceState.getInt(wrap.getAttributeName());

if(checked != -1) {
    RadioButton btn = (RadioButton) rg.getChildAt(checked);
    btn.toggle();
}

Ответ 5

Также вы можете использовать метод getChildAt(). Вот так:

mOption = (RadioGroup) findViewById(R.id.option);
((RadioButton)mOption.getChildAt(0)).setChecked(true);

Ответ 6

Остерегайтесь! проверка радиообъекта с помощью setChecked() не меняет состояние внутри RadioGroup. Например, этот метод из радиогруппы вернет неправильный результат: getCheckedRadioButtonId().

Всегда проверяйте радиогруппу с помощью

mOption.check(R.id.option1);

вы были предупреждены;)

Ответ 7

он будет работать, если вы поместите свой mOption.check(R.id.option1); в метод onAttachedToWindow или вот так:

view.post(new Runnable()
{
    public void run() 
    {
        // TODO Auto-generated method stub
        mOption.check(R.id.option1); 
    }
});

причина может заключаться в том, что метод проверки работает только тогда, когда радиогруппа действительно отображается.

Ответ 8

Я использую эту часть кода при работе с индексами для группы радио:

radioGroup.check(radioGroup.getChildAt(index).getId());