¿Cómo configurar OnClickListener en un RadioButton en Android?


109

Tengo dos RadioButtons dentro de a RadioGroup. Quiero ponerme OnClickListeneren esos RadioButtons. Dependiendo de en qué RadioButtonse haga clic, quiero cambiar el texto de un EditText. ¿Cómo puedo conseguir esto?

Respuestas:


234

Creo que una mejor manera es usar RadioGroupy configurar el oyente para que cambie y actualice en Viewconsecuencia (le ahorra tener 2 o 3 o 4 oyentes, etc.).

    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
No estaba funcionando para mí, Eclipse sugirió que agregara @Override, y eso se solucionó. Gracias
Jack Franzen

sí, usaría radiogroup, excepto que no funciona a menos que sea un padre directo en el xml y no puedo mantenerlo como padre directo ya que este estúpido botón de
radio

podría intentar centrar el botón de radio poniendo android: gravity = "center" en el xml debajo de la etiqueta RadioGroup. @RudolfRein
OuuGiii

¿Qué hacemos si el botón de radio se crea dinámicamente y no tiene una identificación?
Arjun Issar

46

Espero que esto te ayudará...

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

y

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

1
Funcionó como un encanto, no olvide agregar un punto y coma después de su último corchete en su oyente al hacer clic
inVINCEable

Antiguo pero bueno. La respuesta aceptada es más sencilla, pero no maneja el caso de un usuario que selecciona algo que ya está seleccionado. Esto lo maneja. Es una pena que el oyente del grupo de radio no maneje "setSelected" sin tener en cuenta "cambiado".
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
groupse necesita en RadioButton rb=(RadioButton)group.findViewById(checkedId);
Estupidez artificial

18

La pregunta era sobre cómo detectar qué botón de opción se hizo clic, así es como puede obtener qué botón se hace clic

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

También puede agregar un oyente desde el diseño XML: android:onClick="onRadioButtonClicked"en su <RadioButton/>etiqueta.

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

Consulte SDK para desarrolladores de Android: botones de opción para obtener más detalles.


7

En caso de que alguien más estuviera luchando con la respuesta aceptada:

Existen diferentes OnCheckedChangeListener-Interfaces. Agregué al primero para ver si se cambió un CheckBox.

import android.widget.CompoundButton.OnCheckedChangeListener;

vs

import android.widget.RadioGroup.OnCheckedChangeListener;

Al agregar el fragmento de Ricky tuve errores:

El método setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) en el tipo RadioGroup no es aplicable para los argumentos (new CompoundButton.OnCheckedChangeListener () {})

Se puede arreglar con la respuesta de Ali:

new RadioGroup.OnCheckedChangeListener()

5

Dado que esta pregunta no es específica de Java, me gustaría agregar cómo puede hacerlo en Kotlin :

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

Aquí radio_group_idestá el asignado android:iddel RadioGroup en cuestión. Para usarlo de esta manera, necesitaría importar kotlinx.android.synthetic.main.your_layout_name.*en el archivo Kotlin de su actividad. También tenga en cuenta que en caso de que el radioGroupparámetro lambda no se use, se puede reemplazar con _(un guión bajo) desde 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()          
        });

Proporcione una explicación para esta respuesta en lugar de simplemente publicar el código.
ScoobyDrew18

la última línea debe ser: 'String slectedValue = radioButton.getText (). toString ()'
Web.11

0

Para Kotlin Aquí se agrega la expresión lambda y se optimiza el código.

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

Espero que esto te ayudará. ¡Gracias!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.