Установить выбранный индекс радиогруппы Android - PullRequest
80 голосов
/ 23 марта 2012

Есть ли способ установить выбранный индекс RadioGroup в Android, кроме циклического переключения дочерних радиокнопок и выбора проверки переключателя на выбранном индексе?

Примечание. Я заполняю группу радиокнопок во время выполнения.

Ответы [ 6 ]

174 голосов
/ 23 марта 2012

Если ваша радиогруппа определена в XML-файле макета, каждой кнопке может быть присвоен идентификатор.Затем вы просто проверяете кнопку, подобную этой

radioGroup.check(R.id.myButtonId);

Если вы создали свою радиогруппу программно (я даже не уверен, как вы это делаете ...), вы можете подумать о создании специального макета XMLфайл только для группы радиостанций, так что вы можете назначить идентификаторы R.id. * для кнопок.

Пожалуйста, смотрите ответ ниже, если вы действительно хотите установить группу радиокнопок по индексу, см.ответ ниже.

83 голосов
/ 15 февраля 2015

В вопросе сказано «установить выбранный ИНДЕКС», вот как установить его по индексу:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

Дополнительная информация: Похоже, что Google хочетВы должны использовать идентификатор вместо индекса, потому что использование идентификатора является более стойким к ошибкам.Например, если у вас есть другой элемент пользовательского интерфейса в вашей RadioGroup, или если другой разработчик переупорядочивает RadioButtons, индексы могут измениться и не соответствовать вашим ожиданиям.Но если вы единственный разработчик, это совершенно нормально.

4 голосов
/ 19 июля 2016

Ответ Сиаваша верен:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

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

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

В этом случае использование индекса 1, например, приведет к ошибке.Элемент с индексом 1 является первой разделительной строкой, а не кнопкой RadioButton.Радиокнопки в этом примере имеют индексы 0, 2, 4, 6.

2 голосов
/ 09 сентября 2015

вы можете сделать findById из радиогруппы.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`
1 голос
/ 15 ноября 2016

Это сработало Для меня, я создал радио кнопку динамически с помощью

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

.

0 голосов
/ 09 октября 2018

Внутри onBindViewHolder установите тег для группы кнопок

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

и в ViewHolder

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }
...