Чи є спосіб встановити вибраний індекс RadioGroup в android, окрім перегляду дочірніх перемикачів та вибору перевірки перемикача за вибраним індексом?
Примітка: Я заповнюю групу радіокнопки під час роботи.
Чи є спосіб встановити вибраний індекс RadioGroup в android, окрім перегляду дочірніх перемикачів та вибору перевірки перемикача за вибраним індексом?
Примітка: Я заповнюю групу радіокнопки під час роботи.
Відповіді:
Якщо ваша радіогрупа визначена у макеті xml-файлу, кожній кнопці можна призначити ідентифікатор. Тоді ви просто перевіряєте таку кнопку
radioGroup.check(R.id.myButtonId);
Якщо ви створили свою радіогрупу програмно (я навіть не впевнений, як ви це робите ...), можливо, ви захочете створити спеціальний файл xml макета лише для радіогрупи, щоб ви могли призначити ідентифікатори R.id. * до кнопок.
Будь ласка, перегляньте відповідь нижче, якщо ви насправді хочете встановити групу перемикачів за покажчиком, див. Відповідь нижче.
((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
check
методу.
Питання відповідало "встановити вибраний ІНДЕКС", ось як встановити його за індексом:
((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
........
Додаткова інформація: Здається, Google хоче, щоб ви використовували ідентифікатор замість індексу, оскільки використання ідентифікатора є більш стійким до помилок. Наприклад, якщо у вашій групі RadioGroup є інший елемент користувацького інтерфейсу, або якщо інший розробник повторно замовляє RadioButtons, індекси можуть змінюватися і бути не такими, як ви очікували. Але якщо ви єдиний розробник, це абсолютно нормально.
Відповідь Сіаваша є правильною:
((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.
Це спрацювало для мене, я створив перемикач динамічно
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 );
Усередині 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()
}