Bagaimana cara mengatur tombol radio dicentang sebagai default di radiogroup?

132

Saya telah membuat RadioGroupdan RadioButtonsecara dinamis sebagai berikut:

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

Di sini langkah radioBtn2.setChecked(true);penyebab radioBtn2selalu dicentang. Itu berarti saya tidak dapat menghapus centang radioBtn2dengan memeriksa dua tombol radio lainnya ( radioBtn1, radioBtn3). Saya ingin membuatnya yang RadioGrouphanya dapat memeriksa satu tombol radio pada satu waktu (Sekarang ia dapat memeriksa dua tombol radio sekaligus).

Bagaimana saya bisa menyelesaikan masalah ini?

Sandy
sumber
apakah Anda perlu secara dinamis ???
vk hooda

Jawaban:

217

Anda harus memeriksa radiobutton di radiogroup seperti ini:

radiogroup.check(IdOfYourButton)

Tentu saja pertama-tama Anda harus menetapkan Id ke tombol radio Anda

EDIT: saya lupa, radioButton.getId()bekerja juga, thx Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

bekerja di xml radiogroup

Sprigg
sumber
39
atau jika Anda tidak ingin id Anda RadioButtondan Anda tahu indeks Anda dapat menggunakan (RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali
17
Anda seharusnya tidak melakukan itu. Itu akan menyebabkan masalah "setChecked" yang dijelaskan dalam pertanyaan ini. Tentu saja ada cara untuk melakukan itu tanpa id dari tombol Anda, tetapi tolong jangan dengan menggunakan setChecked() One way akan menjadi radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())atau sesuatu seperti itu
Sprigg
1
baik untuk tidak lupa menambahkan tombol radio ke grup tombol radio sebelum memanggil group.check (button.getId ())
tom
1
Saya harus melakukannya dengan cara ini: radioGroup.Check(radioGroup.GetChildAt(0).Id);untuk pengguna Xamarin. Android
Mario Galván
112

Dalam hal atribut xml-nya android:checkedButtonyang mengambil iddari RadioButtonuntuk diperiksa.

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

Di file XML setel android:checkedButtonbidang di Anda RadioGroup, dengan id default Anda 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>
Sara
sumber
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());
Ramesh Solanki
sumber
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);
Anuj Oscar
sumber
Yang penting adalah menggunakan setChecked()setelah semua tombol radio telah ditambahkan ke grup radio. Maka, radioGroup.check(radioBtn2.getId())tidak perlu
Hartmut Pfitzinger
3

Ada masalah yang sama dalam kode Kolega saya. Ini terdengar karena Grup Radio Anda tidak diatur dengan benar dengan Tombol Radio Anda. Inilah alasan mengapa Anda dapat memilih banyak tombol radio. Saya mencoba banyak hal, akhirnya saya melakukan trik yang salah sebenarnya, tetapi berfungsi dengan baik.

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

Di sini saya menetapkan satu untuk loop, yang memeriksa tombol radio yang tersedia dan menghapus semua tombol kecuali yang baru diklik. Cobalah.

Korek
sumber
1

Tambahkan android:checked = "true"aktivitas Anda.xml

Leotrim Vojvoda
sumber
0

Ini bug dari RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 tanpa viewId, dan generateViewId ada di 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);
    }
}

jadi, pertama radioGroup.addView (radioBtn2), kemudian radioBtn2.setChecked (true);

Seperti ini:

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