Встановити вибраний індекс групи Android RadioGroup


95

Чи є спосіб встановити вибраний індекс RadioGroup в android, окрім перегляду дочірніх перемикачів та вибору перевірки перемикача за вибраним індексом?

Примітка: Я заповнюю групу радіокнопки під час роботи.

Відповіді:


202

Якщо ваша радіогрупа визначена у макеті xml-файлу, кожній кнопці можна призначити ідентифікатор. Тоді ви просто перевіряєте таку кнопку

radioGroup.check(R.id.myButtonId);

Якщо ви створили свою радіогрупу програмно (я навіть не впевнений, як ви це робите ...), можливо, ви захочете створити спеціальний файл xml макета лише для радіогрупи, щоб ви могли призначити ідентифікатори R.id. * до кнопок.

Будь ласка, перегляньте відповідь нижче, якщо ви насправді хочете встановити групу перемикачів за покажчиком, див. Відповідь нижче.

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

2
Привіт, я створив їх програмно, використовуючи цей код: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Inflate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Хасан Мокдад

Оскільки ви встановлюєте їх ідентифікатори на індекс у lookupTypes, ви можете просто використовувати цей індекс як аргумент checkметоду.
jjm

ця відповідь буквально просто ще раз пояснює те, що вже задано запитувачем - інша відповідь має бути прийнятою відповіддю, оскільки вона правильно говорить, як вибрати за індексом.
Лассі Кіннунен

@LassiKinnunen Я відчуваю, що кількість голосів за цю відповідь свідчить про те, що люди отримують від неї те, що їм потрібно ... сказавши, ви маєте рацію, що інша відповідь є більш правильною для поставленого питання: - /
jjm

2
Чесно кажучи, я відчуваю себе трохи збентеженим, що це моя найкраща відповідь ТАК.
jjm

86

Питання відповідало "встановити вибраний ІНДЕКС", ось як встановити його за індексом:

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

........

Додаткова інформація: Здається, Google хоче, щоб ви використовували ідентифікатор замість індексу, оскільки використання ідентифікатора є більш стійким до помилок. Наприклад, якщо у вашій групі RadioGroup є інший елемент користувацького інтерфейсу, або якщо інший розробник повторно замовляє RadioButtons, індекси можуть змінюватися і бути не такими, як ви очікували. Але якщо ви єдиний розробник, це абсолютно нормально.


Чи можете ви пояснити цей код, як це правильна відповідь?
rfornal

1
@rfornal цей код дозволяє захопити перемикач INDEX, на відміну від View id (наприклад, R.id.radioButton1), і зменшує потребу в реалізації таблиці пошуку для перетворення індексу в ідентифікатор перегляду.
Siavash

5

Відповідь Сіаваша є правильною:

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

Але майте на увазі, що radioGroup може містити інші види, крім 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. Кнопки radio у цьому прикладі мають індекси 0, 2, 4, 6.


3

ви можете знайти findViewById з радіогрупи.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`

1

Це спрацювало для мене, я створив перемикач динамічно

  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
    }
}

Тепер перевірте кнопку, використовуючи,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );

0

Усередині onBindViewHolder встановіть тег на Button Group

@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()
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.