Android obtient la valeur de radiobutton sélectionné

J’ai un morceau de code avec trois RadioButton dans un RadioGroup . Je veux mettre un onCheckedListener qui montrera la valeur de RadioButton dans un Toas mais ce que j’ai obtenu jusqu’ici ne fonctionne pas. Comment puis-je obtenir la valeur de RadioButton et l’afficher dans un Toast ? Merci d’avance, c’est mon code:

 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 Ssortingng value = ((RadioButton)findViewById(rg.getCheckedRadioButtonId())) .getText().toSsortingng(); rg.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { Toast.makeText(getBaseContext(), value, Toast.LENGTH_SHORT).show(); } }); } } 

Fichier XML:

        

Testé et fonctionnel. Vérifier ceci

 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

     

Dans le cas où vous souhaitez effectuer un travail sur la sélection de l’un des boutons radio (sans bouton OK ou autre), votre code est correct, peu mis à jour.

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

utilisez simplement la fonction getCheckedRadioButtonId () pour déterminer si quelque chose est coché, si -1 est renvoyé, vous pouvez éviter que le toast apparaisse

Pour quiconque remplit un programme et cherche à obtenir un index, vous remarquerez peut-être que checkedId change lorsque vous revenez à l’activité / au fragment et que vous rajoutez ces boutons radio. Une façon de contourner cela consiste à définir une balise avec l’index:

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

Alors dans votre auditeur:

  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); Ssortingng gender=radioButton.getText().toSsortingng(); 

J’espère que cela fonctionne. Vous pouvez convertir votre sortie en chaîne de la manière ci-dessus. gender.getCheckedRadioButtonId(); – le genre est l’id de RadioGroup.

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

Merci beaucoup à Chris.

Ceci est ma solution:

 RadioGroup radgroup_opcionesEventos = null; private static Ssortingng[] 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(Ssortingng 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(Ssortingng 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(); Ssortingng mySelectedIndex = radioButton.getTag().toSsortingng(); } }); 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) { Ssortingng 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(); Ssortingng 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(); } } 

J’ai eu des problèmes pour identifier les boutons radio lorsque les boutons radio sont générés dynamicment. Cela ne semble pas fonctionner si vous essayez de définir manuellement les ID à l’aide de RadioButton.setId() . Ce qui a fonctionné pour moi était d’utiliser View.getChildAt() et View.getParent() afin de parcourir les boutons radio et de déterminer lequel était coché. Tout ce dont vous avez besoin est de récupérer d’abord le RadioGroup via findViewById(R.id.myRadioGroup) , puis de parcourir ses enfants. Vous saurez au fur et à mesure que vous parcourez le bouton sur lequel vous vous trouvez, et vous pouvez simplement utiliser RadioButton.isChecked() pour déterminer s’il s’agit du bouton qui a été coché.