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
надеюсь, это поможет вам!