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