Android obtiene valor del botón de radio seleccionado

Tengo un código con tres RadioButton dentro de un RadioGroup . Quiero establecer un onCheckedListener que muestre el valor del RadioButton en un Toas t, sin embargo, lo que he obtenido hasta ahora no está funcionando. ¿Cómo obtengo el valor de RadioButton y lo visualizo en un Toast ? Gracias de antemano, este es mi código:

 package com.example.toohelps; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; public class MainActivity extends Activity { RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1); final String value = ((RadioButton)findViewById(rg.getCheckedRadioButtonId())) .getText().toString(); rg.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { Toast.makeText(getBaseContext(), value, Toast.LENGTH_SHORT).show(); } }); } } 

Archivo XML:

        

Probado y funcionando. Verifique esto

 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class MyAndroidAppActivity extends Activity { private RadioGroup radioGroup; private RadioButton radioButton; private Button btnDisplay; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); addListenerOnButton(); } public void addListenerOnButton() { radioGroup = (RadioGroup) findViewById(R.id.radio); btnDisplay = (Button) findViewById(R.id.btnDisplay); btnDisplay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // get selected radio button from radioGroup int selectedId = radioGroup.getCheckedRadioButtonId(); // find the radiobutton by returned id radioButton = (RadioButton) findViewById(selectedId); Toast.makeText(MyAndroidAppActivity.this, radioButton.getText(), Toast.LENGTH_SHORT).show(); } }); } } 

xml

     

En el caso, si desea hacer algún trabajo en la selección de uno de los botones de radio (sin tener ningún botón Aceptar adicional o algo así), su código está bien, muy poco actualizado.

 public class MainActivity extends Activity { RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId){ case R.id.radio0: // do operations specific to this selection break; case R.id.radio1: // do operations specific to this selection break; case R.id.radio2: // do operations specific to this selection break; } } }); } } 
 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { radioButton = (RadioButton) findViewById(checkedId); Toast.makeText(getBaseContext(), radioButton.getText(), Toast.LENGTH_SHORT).show(); } } ); 

solo use la función getCheckedRadioButtonId () para determinar si hay algo marcado, si devuelve -1, puede evitar que aparezcan tostadas

Para cualquiera que esté completando programáticamente y buscando obtener un índice, es posible que observe que checkId cambia a medida que regresa a la actividad / fragmento y vuelve a agregar esos botones de opción. Una forma de evitar esto es establecer una etiqueta con el índice:

  for(int i = 0; i < myNames.length; i++) { rB = new RadioButton(getContext()); rB.setText(myNames[i]); rB.setTag(i); myRadioGroup.addView(rB,i); } 

Entonces en tu oyente:

  myRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) group.findViewById(checkedId); int mySelectedIndex = (int) radioButton.getTag(); } }); 
 int genid=gender.getCheckedRadioButtonId(); RadioButton radioButton = (RadioButton) findViewById(genid); String gender=radioButton.getText().toString(); 

Espero que esto funcione. Puede convertir su salida a cadena de la manera anterior. gender.getCheckedRadioButtonId(); – El género es la identificación de RadioGroup.

 Radiogroup rgteam; String team; rgteam.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { RadioButton rb= (RadioButton) findViewById(checkedId); team = rb.getText().toString(); } }); 

Muchas gracias a Chris.

Esta es mi solución:

 RadioGroup radgroup_opcionesEventos = null; private static String[] arrayEventos = { "Congestión", "Derrumbe", "Accidente" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); radgroup_opcionesEventos = (RadioGroup)findViewById(R.id.rg_opciones_evento); int i=0;//a.new.ln for(String evento : arrayEventos) { //RadioButton nuevoRadio = crearRadioButton(evento);//a.old.ln RadioButton nuevoRadio = crearRadioButton(evento,i);//a.new.ln radgroup_opcionesEventos.addView(nuevoRadio,i); } RadioButton primerRadio = (RadioButton) radgroup_opcionesEventos.getChildAt(0); primerRadio.setChecked(true); } private RadioButton crearRadioButton(String evento, int n) { //RadioButton nuevoRadio = new RadioButton(this);//a.old.ln RadioButton nuevoRadio = new RadioButton(getApplicationContext());//a.new.ln LinearLayout.LayoutParams params = new RadioGroup.LayoutParams( RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); nuevoRadio.setLayoutParams(params); nuevoRadio.setText(evento); nuevoRadio.setTag(evento); return nuevoRadio; } @Override protected void onResume() { radgroup_opcionesEventos.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) group.findViewById(checkedId); //int mySelectedIndex = (int) radioButton.getTag(); String mySelectedIndex = radioButton.getTag().toString(); } }); super.onResume(); } 
 mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { RadioButton radioButton = (RadioButton)group.findViewById(checkedId); } }); 

RadioGroup en XML

       

activity_main.xml

            

MainActivity.java

 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.Toast; public class MainActivity extends AppCompatActivity { RadioButton android, java, angular, python; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); android = (RadioButton)findViewById(R.id.rdbAndroid); angular = (RadioButton)findViewById(R.id.rdbAngular); java = (RadioButton)findViewById(R.id.rdbJava); python = (RadioButton)findViewById(R.id.rdbPython); Button btn = (Button)findViewById(R.id.getBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String result = "Selected Course: "; result+= (android.isChecked())?"Android":(angular.isChecked())?"AngularJS":(java.isChecked())?"Java":(python.isChecked())?"Python":""; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); } public void onRadioButtonClicked(View view) { boolean checked = ((RadioButton) view).isChecked(); String str=""; // Check which radio button was clicked switch(view.getId()) { case R.id.rdbAndroid: if(checked) str = "Android Selected"; break; case R.id.rdbAngular: if(checked) str = "AngularJS Selected"; break; case R.id.rdbJava: if(checked) str = "Java Selected"; break; case R.id.rdbPython: if(checked) str = "Python Selected"; break; } Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show(); } } 

He tenido problemas para obtener Id de botones de radio también cuando los RadioButtons se generan dinámicamente. No parece funcionar si intentas configurar manualmente las ID usando RadioButton.setId() . Lo que funcionó para mí fue usar View.getChildAt() y View.getParent() para iterar a través de los botones de radio y determinar cuál fue marcado. Todo lo que necesita es primero obtener el RadioGroup a través de findViewById(R.id.myRadioGroup) y luego iterar a través de sus hijos. Lo sabrá mientras itera a través del botón en el que se encuentra, y simplemente puede usar RadioButton.isChecked() para determinar si ese es el botón que se marcó.