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?

mayur rahatekar
sumber

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
        }
    });
Ricky
sumber
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...
 }
};
Prajurit terakhir
sumber
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();
        }
    });
Ali
sumber
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;
                }
            }
        });
Hitesh Sahu
sumber
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.

Bartosz Bilicki
sumber
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()
Andy P.
sumber
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.

Faheel
sumber
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()          
        });
Ram Pravesh
sumber
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!

Nitin Karande
sumber