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?

Mayur Rahatekar
quelle

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
        }
    });
Ricky
quelle
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...
 }
};
Letzter Krieger
quelle
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();
        }
    });
Ali
quelle
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;
                }
            }
        });
Hitesh Sahu
quelle
10

Sie können auch einen Listener aus dem XML-Layout hinzufügen: android:onClick="onRadioButtonClicked"in Ihrem <RadioButton/>Tag.

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

Weitere Informationen finden Sie unter SDK-Optionsfelder für Android-Entwickler .

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

Faheel
quelle
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
quelle
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!

Nitin Karande
quelle