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ąć?

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

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

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

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

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 .


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

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.


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

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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.