Setel indeks yang dipilih dari Android RadioGroup

97

Apakah ada cara untuk menyetel indeks terpilih dari RadioGroup di android, selain perulangan melalui tombol radio turunan dan memilih memeriksa tombol radio pada indeks yang dipilih?

Catatan: Saya mengisi Grup Tombol Radio pada waktu proses.

Hassan Mokdad
sumber

Jawaban:

204

Jika grup radio Anda ditentukan dalam file layout xml, setiap tombol dapat diberi id. Kemudian Anda tinggal mencentang tombol seperti ini

radioGroup.check(R.id.myButtonId);

Jika Anda membuat grup radio secara terprogram (saya bahkan tidak yakin bagaimana Anda melakukannya ...), Anda mungkin ingin mempertimbangkan untuk membuat file xml layout khusus hanya untuk grup radio tersebut sehingga Anda dapat menetapkan R.id. * ids ke tombol.

Silakan lihat jawaban di bawah ini jika Anda sebenarnya ingin mengatur kelompok tombol radio menurut indeks, lihat jawaban di bawah.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
jjm
sumber
2
Hai, saya membuatnya secara terprogram menggunakan kode ini: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Memekarkan (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad
Karena Anda menyetel id mereka ke indeks di lookupTypes, Anda bisa menggunakan indeks itu sebagai argumen untuk checkmetode tersebut.
jjm
jawaban ini secara harfiah hanya menjelaskan lagi apa yang telah dinyatakan oleh penanya - jawaban yang lain harus merupakan jawaban yang diterima karena dengan benar memberitahukan cara memilih dengan indeks.
Lassi Kinnunen
@LassiKinnunen Saya merasa jumlah suara positif pada jawaban ini menunjukkan bahwa orang-orang mendapatkan apa yang mereka butuhkan darinya ... yang mengatakan, Anda benar bahwa jawaban lain lebih tepat untuk pertanyaan yang diajukan: - /
jjm
2
Sejujurnya saya merasa agak malu karena ini adalah jawaban SO terbaik saya.
jjm
87

Pertanyaan mengatakan "set selected INDEX", berikut cara mengaturnya dengan indeks:

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

........

Info tambahan: Tampaknya Google ingin Anda menggunakan id daripada indeks, karena menggunakan id lebih banyak bukti bug. Misalnya, jika Anda memiliki elemen UI lain di RadioGroup Anda, atau jika pengembang lain memesan ulang RadioButtons, indeks mungkin berubah dan tidak seperti yang Anda harapkan. Tetapi jika Anda satu-satunya pengembang, ini tidak masalah.

Siavash
sumber
Bisakah Anda menjelaskan kode ini, bagaimana jawaban yang benar?
rfornal
1
@rfornal kode ini memungkinkan Anda untuk mengambil tombol radio menurut INDEX, bukan dengan ID Tampilan (seperti R.id.radioButton1), dan mengurangi kebutuhan untuk mengimplementasikan tabel pencarian untuk mengonversi indeks menjadi id tampilan.
Siavash
5

Jawaban Siavash benar:

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

Namun ketahuilah bahwa radioGroup dapat berisi tampilan selain radioButtons - seperti contoh ini yang menyertakan garis samar di bawah setiap pilihan.

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

Dalam hal ini menggunakan indeks 1, misalnya, akan menghasilkan error. Item di indeks 1 adalah baris pemisah pertama - bukan radioButton. RadioButtons dalam contoh ini berada pada indeks 0, 2, 4, 6.

Alan
sumber
3

Anda dapat melakukan findViewById dari grup radio.

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

Ini Bekerja Bagi saya, saya membuat tombol radio secara dinamis oleh

  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
    }
}

Sekarang Periksa tombol menggunakan,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );
Mukeshkumar S
sumber
0

Di dalam onBindViewHolder, setel tag ke Grup Tombol

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

dan di 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()
    }
Jiten Basnet
sumber
0

Menggunakan Kotlin, Anda dapat melakukannya

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

atau

radio_group_id.check(R.id.radio_button_id)

AbdelraZek
sumber