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

#android #radio-group

#Android #радиогруппа

Вопрос:

Я создаю 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);
  

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

Комментарии:

1. Если вы хотели проверить переключатели программно, вам не следовало принимать этот ответ, потому что именно так мы установили их проверку в файле xml!

Ответ №1:

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

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

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

Комментарии:

1. Да, это работает для RadioButton с атрибутом checked, назначенным в XML, но не работает с кодом Java (т.Е. mOption.check(R.id.option1));

2. Поскольку у меня есть две RadioGroup в одном и том же макете, код не работает. Если я удалю один, другой будет работать хорошо. У меня все еще проблема с двумя или более RadioGroup в одном и том же макете. Спасибо

3. Этот ответ неверен и опасен. установка радиокнопки не приведет к изменению состояния радиогруппы. Бао Ле сам говорит, почему он не смог заставить это работать: у него был один и тот же идентификатор, повторенный дважды внутри xml.

4. @Blackbelt тот факт, что вы видите набор radiobutton (после того, как вы вызвали setChecked), но состояние RadioGroup внутри не изменяется. Это может привести к незначительным ошибкам, когда вы видите набор кнопок radiobutton визуально, но вы запрашиваете состояние RadioGroup и получаете идентификатор другого набора кнопок radiobutton.

5. @AndrewBloom, это не простая ошибка. Это ожидаемое поведение в соответствии с документацией RadioGroup.

Ответ №2:

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

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

Ответ №3:

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

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

 mOption.check(R.id.option1);
  

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

Ответ №4:

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

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

Комментарии:

1. Лучший ответ. Одна строка. Легко понять. Требуется один объект. Может быть добавлен к методу очень легко.

2. Это должно быть вверху. Другие излишне сложны.

Ответ №5:

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

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

Комментарии:

1. Это не работает ни у меня, ни у mOption.check(R.id.option1); Я пробовал в onCreate() и onResume(). Что не так?

Ответ №6:

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

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

Ответ №7:

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

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

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

Комментарии:

1. Я думаю, что checked должно быть> -1 not ! = -1

Ответ №8:

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

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

установите положение в соответствии с вашим дизайном RadioGroup

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

Ответ №9:

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

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

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

Комментарии:

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

Ответ №10:

В Kotlin. Выберите первый элемент. И вам нужно сделать это в onViewCreated или позже.

 radioGroup.apply { check(getChildAt(0).id) }
  

Ответ №11:

Я предпочитаю использовать

 RadioButton b = (RadioButton) findViewById(R.id.option1);
b.performClick();
  

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

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

Причина заключается setChecked(true) только в изменении проверенного состояния переключателя. Это не запускает onClick() метод, добавленный к вашему переключателю. Иногда это может отнимать ваше время на отладку, почему действие, связанное с onClick() не работает.

Ответ №12:

Для Kotlin:

check(radioGroup.children.first().id)