ตั้งค่าดัชนีที่เลือกของ Android RadioGroup


96

มีวิธีตั้งค่าดัชนีที่เลือกของ RadioGroup ใน Android หรือไม่นอกเหนือจากการวนลูปผ่านปุ่มวิทยุลูกและเลือกตรวจสอบปุ่มตัวเลือกที่ดัชนีที่เลือก

หมายเหตุ: ฉันกำลังเติมกลุ่มปุ่มตัวเลือกในขณะทำงาน

คำตอบ:


203

หากกำหนดกลุ่มวิทยุของคุณในไฟล์ xml เค้าโครงแต่ละปุ่มสามารถกำหนด id ได้ จากนั้นคุณก็ตรวจสอบปุ่มเช่นนี้

radioGroup.check(R.id.myButtonId);

หากคุณสร้างกลุ่มวิทยุโดยใช้โปรแกรม (ฉันไม่แน่ใจด้วยซ้ำว่าคุณทำสิ่งนี้อย่างไร ... ) คุณอาจต้องการพิจารณาสร้างไฟล์ xml เลย์เอาต์พิเศษเฉพาะสำหรับกลุ่มวิทยุเพื่อให้คุณสามารถกำหนด Rid ไปที่ปุ่มต่างๆ

โปรดดูคำตอบด้านล่างหากคุณต้องการตั้งค่ากลุ่มปุ่มตัวเลือกตามดัชนีโปรดดูคำตอบด้านล่าง

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

2
สวัสดีฉันสร้างโปรแกรมโดยใช้รหัสนี้: สำหรับ (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = RadioButton ใหม่ (สิ่งนี้); //, null, // R.style RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater () ขยาย (R.layout.tmpltradiobutton, null); rbt.setId (ผม); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad

เนื่องจากคุณตั้งค่ารหัสเป็นดัชนีใน lookupTypes คุณสามารถใช้ดัชนีนั้นเป็นอาร์กิวเมนต์ของcheckวิธีการได้
jjm

คำตอบนี้อธิบายได้อย่างแท้จริงอีกครั้งว่าผู้ถามได้ระบุอะไรไว้แล้ว - คำตอบอื่นควรเป็นคำตอบที่ยอมรับได้เนื่องจากจะบอกวิธีการเลือกโดยดัชนีได้อย่างถูกต้อง
Lassi Kinnunen

@LassiKinnunen ฉันรู้สึกว่าจำนวนโหวตในคำตอบนี้ชี้ให้เห็นว่าผู้คนได้รับสิ่งที่ต้องการจากมัน ... ที่กล่าวว่าคุณคิดถูกแล้วที่คำตอบอื่นถูกต้องกว่าสำหรับคำถามที่ถาม: - /
jjm

2
ฉันรู้สึกอายเล็กน้อยที่นี่เป็นคำตอบ SO ที่ได้รับการโหวตสูงสุดของฉัน
jjm

87

คำถามกล่าวว่า "set selected INDEX" ต่อไปนี้เป็นวิธีตั้งค่าตามดัชนี:

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

........

ข้อมูลเพิ่มเติม: ดูเหมือนว่า Google ต้องการให้คุณใช้ id แทนดัชนีเนื่องจากการใช้ id เป็นการพิสูจน์ข้อบกพร่องมากกว่า ตัวอย่างเช่นหากคุณมีองค์ประกอบ UI อื่นใน RadioGroup ของคุณหรือหากนักพัฒนารายอื่นสั่งซื้อปุ่ม RadioButtons ใหม่ดัชนีอาจเปลี่ยนแปลงและไม่เป็นไปตามที่คุณคาดไว้ แต่ถ้าคุณเป็นนักพัฒนาเพียงคนเดียวก็ทำได้ดี


คุณช่วยอธิบายรหัสนี้ได้ไหมว่าคำตอบที่ถูกต้องเป็นอย่างไร
rfornal

1
@rfornal รหัสนี้ช่วยให้คุณสามารถจับปุ่มตัวเลือกข้าง INDEX ซึ่งตรงข้ามกับ View id (เช่น R.id.radioButton1) และลดความจำเป็นในการใช้ตารางค้นหาเพื่อแปลงดัชนีเพื่อดู id
Siavash

5

คำตอบของ Siavash ถูกต้อง:

((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 radioButtons ในตัวอย่างนี้อยู่ที่ดัชนี 0, 2, 4, 6



2

สิ่งนี้ได้ผลสำหรับฉันฉันสร้างปุ่มตัวเลือกแบบไดนามิกโดย

  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 ตั้งค่าแท็กเป็นกลุ่มปุ่ม

@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()
    }

0

การใช้ Kotlin คุณสามารถทำได้โดย

  (radio_group_id.getChildAt(index) as RadioButton).isChecked = true

หรือ

radio_group_id.check(R.id.radio_button_id)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.