Bagaimana cara mengatur OnClickListener pada RadioButton di Android?


109

Saya memiliki dua RadioButtondi dalam a RadioGroup. Saya ingin mengatur OnClickListenerpada mereka RadioButtons. Bergantung pada mana RadioButtonyang diklik, saya ingin mengubah teks EditText. Bagaimana saya bisa mencapai ini?

Jawaban:


234

Saya pikir cara yang lebih baik adalah menggunakan RadioGroupdan mengatur pendengar untuk mengubah dan memperbarui yang Viewsesuai (menghemat Anda memiliki 2 atau 3 atau 4 pendengar dll).

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);        
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected
        }
    });

2
Tidak berfungsi untuk saya, Eclipse menyarankan saya menambahkan @Override, dan itu diperbaiki. Terima kasih
Jack Franzen

ya, saya akan menggunakan radiogroup kecuali itu tidak berfungsi kecuali itu adalah induk langsung di xml dan saya tidak bisa menyimpannya sebagai induk langsung karena tombol radio bodoh ini tidak dapat disejajarkan ke tengah jadi saya harus melampirkannya dalam linearlayout ...
Jaxx0rr

Anda dapat mencoba memusatkan radiobutton dengan meletakkan android: gravity = "center" di xml di bawah tag RadioGroup. @ RudolfRein
OuuGiii

Apa yang kita lakukan jika tombol radio dibuat secara dinamis, dan tidak memiliki id?
Arjun Issar

46

Semoga ini bisa membantu Anda ...

RadioButton rb = (RadioButton) findViewById(R.id.yourFirstRadioButton);
rb.setOnClickListener(first_radio_listener);

dan

OnClickListener first_radio_listener = new OnClickListener (){
 public void onClick(View v) {
   //Your Implementaions...
 }
};

1
Bekerja seperti pesona, jangan lupa untuk menambahkan titik koma setelah tanda kurung kurawal terakhir Anda pada pendengar Anda saat klik
inVINCEable

Oldie tapi bagus. Jawaban yang diterima lebih ramping tetapi tidak menangani kasus pengguna memilih sesuatu yang sudah dipilih. Ini menanganinya. Malu pendengar radiogroup tidak menangani "setSelected" tanpa memperhatikan "berubah".
JamieB

27
 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected
            RadioButton rb=(RadioButton)findViewById(checkedId);
            textViewChoice.setText("You Selected " + rb.getText());
            //Toast.makeText(getApplicationContext(), rb.getText(), Toast.LENGTH_SHORT).show();
        }
    });

1
groupdibutuhkan di RadioButton rb=(RadioButton)group.findViewById(checkedId);
Kebodohan Buatan

18

Pertanyaannya adalah tentang Mendeteksi tombol radio mana yang diklik, ini adalah bagaimana Anda bisa mendapatkan tombol mana yang diklik

final RadioGroup radio = (RadioGroup) dialog.findViewById(R.id.radioGroup1);
        radio.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                View radioButton = radio.findViewById(checkedId);
                int index = radio.indexOfChild(radioButton);

                // Add logic here

                switch (index) {
                case 0: // first button

                    Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
                    break;
                case 1: // secondbutton

                    Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
                    break;
                }
            }
        });

10

Anda juga bisa menambahkan listener dari XML layout: android:onClick="onRadioButtonClicked"di <RadioButton/>tag Anda .

<RadioButton android:id="@+id/radio_pirates"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pirates"
    android:onClick="onRadioButtonClicked"/>

Lihat SDK pengembang Android- Radio Buttons untuk detailnya.


7

Kalau-kalau ada orang lain yang berjuang dengan jawaban yang diterima:

Ada OnCheckedChangeListener-Interfaces yang berbeda. Saya menambahkan ke yang pertama untuk melihat apakah Kotak Centang diubah.

import android.widget.CompoundButton.OnCheckedChangeListener;

vs.

import android.widget.RadioGroup.OnCheckedChangeListener;

Saat menambahkan cuplikan dari Ricky, saya mengalami kesalahan:

Metode setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) dalam tipe RadioGroup tidak berlaku untuk argumen (baru CompoundButton.OnCheckedChangeListener () {})

Bisa diperbaiki dengan jawaban dari Ali:

new RadioGroup.OnCheckedChangeListener()

5

Karena pertanyaan ini tidak spesifik untuk Java, saya ingin menambahkan bagaimana Anda bisa melakukannya di Kotlin :

radio_group_id.setOnCheckedChangeListener({ radioGroup, optionId -> {
        when (optionId) {
            R.id.radio_button_1 -> {
                // do something when radio button 1 is selected
            }
            // add more cases here to handle other buttons in the RadioGroup
        }
    }
})

Berikut radio_group_idadalah tugas android:iddari RadioGroup yang bersangkutan. Untuk menggunakannya dengan cara ini, Anda perlu mengimpor kotlinx.android.synthetic.main.your_layout_name.*file Kotlin aktivitas Anda. Perhatikan juga bahwa jika radioGroupparameter lambda tidak digunakan, itu bisa diganti dengan _(garis bawah) sejak Kotlin 1.1.


1
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);     
    radioGroup.setOnClickListener(v -> {
                        // get selected radio button from radioGroup
                        int selectedId = radioGroup.getCheckedRadioButtonId();
                        // find the radiobutton by returned id
                        radioButton =  findViewById(selectedId);
                        String slectedValue=radioButton.getText()          
        });

Berikan penjelasan untuk jawaban ini, bukan hanya memposting kode.
ScoobyDrew18

baris terakhir harus: 'String slectedValue = radioButton.getText (). toString ()'
11

0

Untuk Kotlin Di sini ditambahkan ekspresi lambda dan Mengoptimalkan Kode.

   radioGroup.setOnCheckedChangeListener { radioGroup, optionId ->
        run {
            when (optionId) {
                R.id.radioButton1 -> {
                    // do something when radio button 1 is selected
                }
                R.id.radioButton2 -> {
                    // do something when radio button 2 is selected
                }
                // add more cases here to handle other buttons in the your RadioGroup
            }
        }
    }

Semoga ini bisa membantu Anda. Terima kasih!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.