Đặt chỉ mục đã chọn của Android RadioGroup


95

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:


202

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

2
Xin chào, tôi đã tạo chúng theo chương trình bằng mã này: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Phồng lên (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad

Vì bạn đang đặt id của chúng thành chỉ mục trong lookupTypes, bạn chỉ có thể sử dụng chỉ mục đó làm đối số cho checkphương thức.
jjm

câu trả lời này theo nghĩa đen chỉ giải thích lại những gì người hỏi câu hỏi đã nêu - câu trả lời còn lại phải là câu trả lời được chấp nhận vì nó cho biết chính xác cách chọn theo chỉ mục.
Lassi Kinnunen

@LassiKinnunen Tôi cảm thấy số phiếu ủng hộ cho câu trả lời này cho thấy rằng mọi người đang nhận được những gì họ cần từ nó ... điều đó nói rằng, bạn đúng khi câu trả lời khác đúng hơn cho câu hỏi được hỏi: - /
jjm

2
Thành thật mà nói tôi cảm thấy hơi xấu hổ vì đây là câu trả lời SO được bình chọn cao nhất của tôi.
jjm

86

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.


Bạn có thể giải thích mã này, làm thế nào nó là câu trả lời đúng?
rfornal

1
@rfornal mã này cho phép bạn lấy nút radio theo INDEX, trái ngược với View id (chẳng hạn như R.id.radioButton1) và giảm nhu cầu triển khai bảng tra cứu để chuyển đổi chỉ mục sang id xem.
Siavash

5

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.


3

bạn có thể thực hiện findViewById từ nhóm radio.

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

1

Đ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 );

0

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()
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.