Wie setze ich OnClickListener auf einem RadioButton in Android?


109

Ich habe zwei RadioButtons in einem RadioGroup. Ich möchte OnClickListenerauf diese RadioButtons setzen. Je nachdem, auf was RadioButtongeklickt wird, möchte ich den Text eines ändern EditText. Wie kann ich das erreichen?

Antworten:


234

Ich denke, ein besserer Weg ist es RadioGroup, den Listener zu verwenden und einzustellen, um ihn Viewentsprechend zu ändern und zu aktualisieren (erspart Ihnen 2 oder 3 oder 4 usw. Listener).

    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
Funktionierte nicht für mich, Eclipse schlug vor, @Override hinzuzufügen, und das wurde behoben. Danke
Jack Franzen

Ja, ich würde Radiogruppe verwenden, außer es funktioniert nicht, es sei denn, es ist ein direktes übergeordnetes Element in der XML und ich kann es nicht als direktes übergeordnetes Element behalten, da dieser dumme Radiobutton nicht zur Mitte ausgerichtet werden kann, also musste ich es in ein lineares
Layout

Sie können versuchen, den Radiobutton zu zentrieren, indem Sie android : vity = "center" in die XML- Datei unter dem RadioGroup-Tag einfügen. @ RudolfRein
OuuGiii

Was tun wir, wenn der Radiobutton dynamisch erstellt wird und keine ID hat?
Arjun Issar

46

Hoffe das wird dir helfen ...

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

und

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

1
Vergessen Sie nicht, ein Semikolon nach Ihrer letzten geschweiften Klammer in Ihrem On-Click-Listener
einzufügen

Alt, aber gut. Die akzeptierte Antwort ist schlanker, behandelt jedoch nicht den Fall, dass ein Benutzer etwas auswählt, das bereits ausgewählt wurde. Dies erledigt es. Schade, dass der Radiogruppen-Listener "setSelected" nicht ohne Rücksicht auf "geändert" verarbeitet.
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
groupwird benötigt in RadioButton rb=(RadioButton)group.findViewById(checkedId);
Künstliche Dummheit

18

Die Frage betraf das Erkennen, auf welches Optionsfeld geklickt wird. Auf diese Weise können Sie ermitteln, auf welches Optionsfeld geklickt wird

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


7

Nur für den Fall, dass jemand anderes mit der akzeptierten Antwort zu kämpfen hatte:

Es gibt verschiedene OnCheckedChangeListener-Schnittstellen. Ich habe zum ersten hinzugefügt, um zu sehen, ob eine CheckBox geändert wurde.

import android.widget.CompoundButton.OnCheckedChangeListener;

vs.

import android.widget.RadioGroup.OnCheckedChangeListener;

Beim Hinzufügen des Snippets von Ricky hatte ich folgende Fehler:

Die Methode setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) vom Typ RadioGroup gilt nicht für die Argumente (new CompoundButton.OnCheckedChangeListener () {})

Kann mit der Antwort von Ali behoben werden:

new RadioGroup.OnCheckedChangeListener()

5

Da diese Frage nicht spezifisch für Java ist, möchte ich hinzufügen, wie Sie dies in Kotlin tun können :

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

Hier radio_group_idist die Zuordnung android:idder betreffenden RadioGroup. Um es auf diese Weise zu verwenden, müssten Sie kotlinx.android.synthetic.main.your_layout_name.*in die Kotlin-Datei Ihrer Aktivität importieren . Beachten Sie auch, dass der radioGroupLambda-Parameter , falls er nicht verwendet wird, _seit Kotlin 1.1 durch (einen Unterstrich) ersetzt werden kann .


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

Bitte erläutern Sie diese Antwort, anstatt einfach den Code zu veröffentlichen.
ScoobyDrew18

Die letzte Zeile muss lauten: 'String slectedValue = radioButton.getText (). toString ()'
Web.11

0

Für Kotlin Hier wird der Lambda-Ausdruck hinzugefügt und der Code optimiert.

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

Hoffe das wird dir helfen. Vielen Dank!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.