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

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

9 ответов


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

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

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


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

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

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

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

Берегись! проверка radiobutton с setChecked() не изменяет состояние внутри Радиогруппы. Например, этот метод из радиогруппы вернет неверный результат:getCheckedRadioButtonId().

Проверьте радиогруппу всегда с

mOption.check(R.id.option1);

вас предупредили;)


возьмите группу радио и посмотрите на детей, чтобы увидеть, если какие-либо из них не отмечены.

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

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

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

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

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

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

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


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

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

Я использую этот фрагмент кода при работе с getId () для radio group:

radiogroup.check(radiogroup.getChildAt(0).getId());

установите положение согласно вашей конструкции RadioGroup

надеюсь, это поможет вам!