Jak ustawić OnClickListener na RadioButton w Androidzie?

109

Mam dwa w RadioButtonśrodku RadioGroup. Chcę ustawić OnClickListenerna tych RadioButtons. W zależności od tego, który RadioButtonkliknięto, chcę zmienić tekst pliku EditText. Jak mogę to osiągnąć?

mayur rahatekar
źródło

Odpowiedzi:

234

Myślę, że lepszym sposobem jest użycie RadioGroupi ustawienie słuchacza na to, aby zmienić i odpowiednio zaktualizować View(oszczędza ci 2, 3 lub 4 itp. Słuchaczy).

    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
źródło
2
Nie działało dla mnie, Eclipse zasugerował dodanie @Override i to naprawiono. Dzięki
Jack Franzen
tak, użyłbym radiogroup, z wyjątkiem tego, że nie działa, chyba że jest to bezpośredni rodzic w xml i nie mogę go zachować jako bezpośredniego rodzica, ponieważ ten głupi radiobutton nie może być wyrównany do środka, więc musiałem go zamknąć w liniowym układzie ...
Jaxx0rr
możesz spróbować wyśrodkować przycisk radiobutton, umieszczając android: gravity = "center" w xml pod tagiem RadioGroup. @RudolfRein
OuuGiii
Co zrobimy, jeśli radiobutton jest tworzony dynamicznie i nie ma identyfikatora?
Arjun Issar
46

Mam nadzieję, że to ci pomoże ...

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

i

OnClickListener first_radio_listener = new OnClickListener (){
 public void onClick(View v) {
   //Your Implementaions...
 }
};
Ostatni wojownik
źródło
1
Działał jak urok, nie zapomnij dodać średnika po ostatnim nawiasie klamrowym na odbiorniku po kliknięciu
inVINCEable
Stary ale jary. Zaakceptowana odpowiedź jest szczuplejsza, ale nie obsługuje przypadku, gdy użytkownik wybiera coś, co już zostało wybrane. To załatwia to. Szkoda, że ​​słuchacz radiogroup nie obsługuje "setSelected" bez względu na "zmienione".
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
źródło
1
groupjest potrzebny w RadioButton rb=(RadioButton)group.findViewById(checkedId);
Sztuczna głupota
18

Pytanie dotyczyło wykrywania, który przycisk radiowy jest kliknięty, w ten sposób można uzyskać, który przycisk jest kliknięty

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
źródło
10

Możesz także dodać detektor z układu XML: android:onClick="onRadioButtonClicked"w swoim <RadioButton/>tagu.

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

Aby uzyskać szczegółowe informacje, zobacz temat SDK dla programistów Androida - przyciski radiowe .

Bartosz Bilicki
źródło
7

Na wypadek gdyby ktoś inny walczył z zaakceptowaną odpowiedzią:

Istnieją różne interfejsy OnCheckedChangeListener. Dodałem do pierwszego, aby sprawdzić, czy CheckBox został zmieniony.

import android.widget.CompoundButton.OnCheckedChangeListener;

vs

import android.widget.RadioGroup.OnCheckedChangeListener;

Podczas dodawania fragmentu od Ricky'ego miałem błędy:

Metoda setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) w typie RadioGroup nie ma zastosowania do argumentów (new CompoundButton.OnCheckedChangeListener () {})

Można naprawić za pomocą odpowiedzi od Ali:

new RadioGroup.OnCheckedChangeListener()
Andy P.
źródło
5

Ponieważ to pytanie nie jest specyficzne dla Javy, chciałbym dodać, jak możesz to zrobić w Kotlinie :

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

Oto radio_group_idprzypisanie android:iddanej RadioGroup. Aby użyć go w ten sposób, musisz zaimportować do kotlinx.android.synthetic.main.your_layout_name.*pliku Kotlin swojej aktywności. Zauważ również, że jeśli radioGroupparametr lambda nie jest używany, można go zastąpić _(podkreśleniem) od Kotlin 1.1.

Faheel
źródło
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
źródło
Podaj wyjaśnienie tej odpowiedzi zamiast po prostu wysyłać kod.
ScoobyDrew18
ostatnia linia musi brzmieć: 'String slectedValue = radioButton.getText (). toString ()'
Web.
0

Dla Kotlin Tutaj dodano wyrażenie lambda i zoptymalizowano kod.

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

Mam nadzieję, że to ci pomoże. Dzięki!

Nitin Karande
źródło