วิธีการตั้งค่าปุ่มตัวเลือกที่ตรวจสอบเป็นค่าเริ่มต้นในกลุ่มวิทยุ?


132

ฉันได้สร้าง RadioGroupและRadioButtonไดนามิกดังต่อไปนี้:

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

นี่คือขั้นตอนที่radioBtn2.setChecked(true);ทำให้เกิดradioBtn2การตรวจสอบเสมอ นั่นหมายความว่าฉันไม่สามารถยกเลิกการเลือกได้radioBtn2โดยตรวจสอบปุ่มตัวเลือกสองปุ่มอื่น ๆ ( radioBtn1,radioBtn3 ) ฉันต้องการทำให้RadioGroupสามารถตรวจสอบปุ่มตัวเลือกได้ครั้งละหนึ่งปุ่มเท่านั้น (ตอนนี้สามารถตรวจสอบปุ่มวิทยุได้สองปุ่มพร้อมกัน)

ฉันจะแก้ปัญหานี้ได้อย่างไร?


คุณต้องการแบบไดนามิกหรือไม่ ???
vk hooda

คำตอบ:


218

คุณควรตรวจสอบปุ่มเรดิโอในกลุ่มวิทยุดังนี้:

radiogroup.check(IdOfYourButton)

แน่นอนว่าคุณต้องตั้งค่า Id ให้กับปุ่มวิทยุของคุณก่อน

แก้ไข: ฉันลืมradioButton.getId()ทำงานได้ดีขอบคุณ Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

ทำงานในกลุ่มเรดิโอกรุ๊ป xml


39
หรือถ้าคุณไม่ต้องการ id ของคุณRadioButtonและคุณรู้ว่าดัชนีคุณสามารถใช้((RadioButton) radioGroup.getChildAt (INDEX)) setChecked (true);
Ahmad Kayyali

17
คุณไม่ควรทำอย่างนั้น ซึ่งจะทำให้เกิดปัญหา "setChecked" ที่อธิบายไว้ในคำถามนี้ แน่นอนว่ามีหลายวิธีในการทำเช่นนั้นโดยไม่มีรหัสของปุ่มของคุณ แต่โปรดอย่าใช้setChecked() วิธีเดียวจะเป็นradiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())หรืออะไรทำนองนั้น
Sprigg

1
อย่าลืมเพิ่มปุ่มตัวเลือกลงในกลุ่มปุ่มตัวเลือกก่อนที่จะโทรไปที่ group.check (button.getId ())
ทอม

1
ฉันต้องทำแบบนี้: radioGroup.Check(radioGroup.GetChildAt(0).Id);สำหรับผู้ใช้ Xamarin Android
Mario Galván

112

ในกรณีที่แอตทริบิวต์ xml android:checkedButtonซึ่งใช้เวลาในidการRadioButtonตรวจสอบ

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>

51

ในไฟล์ XML ตั้งค่าandroid:checkedButtonฟิลด์ในของคุณRadioGroupด้วย id ของค่าเริ่มต้นของคุณRadioButton:

<RadioGroup
    ....
    android:checkedButton="@+id/button_1">

    <RadioButton
        android:id="@+id/button_1"
        ...../>

    <RadioButton
        android:id="@+id/button_2"
        ...../>

    <RadioButton
        android:id="@+id/button_3"
        ...../>
</RadioGroup>

20
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());

6
RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);

สิ่งสำคัญคือการใช้งานsetChecked()หลังจากเพิ่มปุ่มตัวเลือกทั้งหมดลงในกลุ่มวิทยุแล้ว จากนั้นradioGroup.check(radioBtn2.getId())ก็ไม่จำเป็น
Hartmut Pfitzinger

3

มีปัญหาเดียวกันในรหัสเพื่อนร่วมงานของฉัน สิ่งนี้ดูเหมือนว่ากลุ่มวิทยุของคุณไม่ได้ตั้งค่าไว้อย่างเหมาะสมกับปุ่มวิทยุของคุณ นี่คือเหตุผลที่คุณสามารถเลือกปุ่มตัวเลือกได้หลายปุ่ม ฉันลองทำหลายอย่างในที่สุดฉันก็ทำเคล็ดลับซึ่งผิดจริง แต่ก็ใช้ได้ดี

for ( int i = 0 ; i < myCount ; i++ )
{
    if ( i != k )
    {
        System.out.println ( "i = " + i );
        radio1[i].setChecked(false);
    }
}

ที่นี่ฉันตั้งค่าหนึ่งสำหรับลูปซึ่งจะตรวจสอบปุ่มตัวเลือกที่มีอยู่และยกเลิกการเลือกทุกปุ่มยกเว้นปุ่มที่คลิกใหม่ ลองมัน.



0

เป็นบั๊กของ RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 ที่ไม่มี viewId และ createViewId อยู่ใน onChildViewAdded ()

public void onChildViewAdded(View parent, View child) {
    if (parent == RadioGroup.this && child instanceof RadioButton) {
        int id = child.getId();
        // generates an id if it's missing
        if (id == View.NO_ID) {
            id = View.generateViewId();
            child.setId(id);
        }
        ((RadioButton) child).setOnCheckedChangeWidgetListener(
                mChildOnCheckedChangeListener);
    }

    if (mOnHierarchyChangeListener != null) {
        mOnHierarchyChangeListener.onChildViewAdded(parent, child);
    }
}

ดังนั้น radioGroup.addView แรก (radioBtn2) จากนั้น radioBtn2.setChecked (จริง);

แบบนี้:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

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