Android'de bir RadioButton'da OnClickListener nasıl ayarlanır?


110

A içinde iki RadioButtons var RadioGroup. Ben ayarlamak istediğiniz OnClickListenerolanlara RadioButtons. Hangisinin RadioButtontıklandığına bağlı olarak , bir EditText. Bunu nasıl başarabilirim?

Yanıtlar:


234

Bence daha iyi bir yol, RadioGroupdinleyiciyi Viewbuna göre değiştirmek ve güncellemek için kullanmak ve ayarlamaktır (2 veya 3 veya 4 vb. Dinleyicilere sahip olmanızı sağlar).

    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
Eclipse benim için çalışmıyordu, @Override eklememi önerdi ve bu düzeltildi. Teşekkürler
Jack Franzen

evet radiogroup'u xml'de doğrudan bir ebeveyni olmadığı sürece çalışmaması dışında kullanırdım ve bu aptal radyo düğmesi merkeze hizalanamadığından onu doğrudan bir üst öğe olarak tutamam, bu yüzden onu doğrusal bir düzene koymak zorunda kaldım ...
Jaxx0rr

RadioGroup etiketinin altındaki xml'ye android: gravity = "center" koyarak radyo düğmesini ortalamayı deneyebilirsiniz . @RudolfRein
OuuGiii

Radyo düğmesi dinamik olarak oluşturulmuşsa ve bir kimliği yoksa ne yapacağız?
Arjun Issar

46

Umarım bu size yardımcı olur ...

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

ve

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

1
Bir cazibe gibi çalıştı, tıklama dinleyicinizdeki son kıvrımlı parantezinizden sonra noktalı virgül eklemeyi unutmayın
inVINCEable

Eski ama iyi. Kabul edilen cevap daha zayıftır, ancak bir kullanıcının önceden seçilmiş bir şeyi seçmesi durumunu ele almaz. Bu halleder. Radiogroup dinleyicisinin "setSelected" öğesini "değiştirildi" ne bakılmaksızın işlememesi utanç verici.
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
groupihtiyaç duyulan RadioButton rb=(RadioButton)group.findViewById(checkedId);
Yapay Aptallık

18

Soru, hangi radyo düğmesinin tıklandığını tespit etmekle ilgiliydi, hangi düğmenin tıklandığını bu şekilde elde edebilirsiniz.

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

Ayrıca XML düzeninden dinleyici ekleyebilirsiniz: android:onClick="onRadioButtonClicked"senin içinde <RadioButton/>etiketi.

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

Ayrıntılar için Android geliştirici SDK- Radyo Düğmeleri'ne bakın.


7

Sadece bir başkasının kabul edilen cevapla boğuşması durumunda:

Farklı OnCheckedChangeListener-Interfaces vardır. Bir CheckBox'ın değiştirilip değiştirilmediğini görmek için ilkine ekledim.

import android.widget.CompoundButton.OnCheckedChangeListener;

vs

import android.widget.RadioGroup.OnCheckedChangeListener;

Ricky'den pasajı eklerken hatalar aldım:

RadioGroup türündeki setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) yöntemi bağımsız değişkenler için geçerli değildir (yeni CompoundButton.OnCheckedChangeListener () {})

Ali'nin cevabı ile düzeltilebilir:

new RadioGroup.OnCheckedChangeListener()

5

Bu soru Java'ya özel olmadığı için Kotlin'de bunu nasıl yapabileceğinizi eklemek isterim :

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

Burada ilgili RadioGroup radio_group_idatanmıştır android:id. Bu şekilde kullanmak kotlinx.android.synthetic.main.your_layout_name.*için faaliyetinizin Kotlin dosyasına aktarmanız gerekir . Ayrıca radioGrouplambda parametresinin kullanılmaması durumunda, _Kotlin 1.1'den itibaren (bir alt çizgi) ile değiştirilebileceğini unutmayın .


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

Lütfen kodu göndermek yerine bu cevap için bir açıklama sağlayın.
ScoobyDrew18

son satır şu olmalıdır: 'String slectedValue = radioButton.getText (). toString ()'
Web. 11

1

Kotlin için İşte lambda ifadesi eklendi ve Kod Optimize Edildi .

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

Umarım bu sana yardımcı olur. Teşekkürler!


Bana çok yardım etti! Teşekkürler!
Artur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.