Có cách nào để đặt chỉ mục đã chọn của RadioGroup trong android, ngoài việc lặp lại các nút radio con và chọn kiểm tra nút radio tại chỉ mục đã chọn không?
Lưu ý: Tôi đang điền Nhóm nút radio vào lúc chạy.
Có cách nào để đặt chỉ mục đã chọn của RadioGroup trong android, ngoài việc lặp lại các nút radio con và chọn kiểm tra nút radio tại chỉ mục đã chọn không?
Lưu ý: Tôi đang điền Nhóm nút radio vào lúc chạy.
Câu trả lời:
Nếu nhóm radio của bạn được xác định trong tệp xml bố cục, mỗi nút có thể được gán một id. Sau đó, bạn chỉ cần kiểm tra một nút như thế này
radioGroup.check(R.id.myButtonId);
Nếu bạn đã tạo nhóm radio của mình theo chương trình (tôi thậm chí không chắc bạn thực hiện việc này như thế nào ...), bạn có thể muốn xem xét tạo một tệp xml bố cục đặc biệt chỉ dành cho nhóm radio để bạn có thể gán các id R.id. * vào các nút.
Vui lòng xem câu trả lời bên dưới nếu thực tế bạn đang muốn đặt nhóm nút radio theo chỉ mục, hãy xem câu trả lời bên dưới.
((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
check
phương thức.
Câu hỏi cho biết "đặt INDEX đã chọn", đây là cách đặt theo chỉ mục:
((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
........
Thông tin bổ sung: Có vẻ như Google muốn bạn sử dụng id thay vì chỉ mục, bởi vì sử dụng id là bằng chứng lỗi nhiều hơn. Ví dụ: nếu bạn có một phần tử giao diện người dùng khác trong RadioGroup của mình hoặc nếu một nhà phát triển khác đặt hàng lại các RadioButtons, các chỉ số có thể thay đổi và không như bạn mong đợi. Nhưng nếu bạn là nhà phát triển duy nhất, điều này hoàn toàn ổn.
Câu trả lời của Siavash là đúng:
((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
Nhưng lưu ý rằng một radioGroup có thể chứa các dạng xem khác với radioButtons - như ví dụ này bao gồm một dòng mờ dưới mỗi lựa chọn.
<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>
Trong trường hợp này, sử dụng chỉ mục 1, chẳng hạn, sẽ tạo ra lỗi. Mục ở chỉ mục 1 là dòng phân tách đầu tiên - không phải là radioButton. Các nút radio trong ví dụ này nằm ở chỉ mục 0, 2, 4, 6.
Điều này hữu ích cho tôi, tôi đã tạo nút radio động bằng cách
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
}
}
Bây giờ Kiểm tra một nút bằng cách sử dụng,
int radio_button_Id = radioGroup.getChildAt(index).getId();
radioGroup.check( radio_button_Id );
Bên trong onBindViewHolder đặt thẻ thành Nhóm nút
@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
...
holder.ButtonGroup.setTag(position);
}
và trong 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()
}