RadioGroup llama a onCheckChanged () tres veces
He estado luchando con un problema de control programático de un RadioButton, que está situado en un RadioGroup. Parece que una sola llamada check()
lanza tres eventos – una vez para el primer RadioButton y dos veces para el segundo, que es mi objetivo. Al mismo tiempo, haciendo clic en el segundo RadioButton en la interfaz hace que aparezca sólo un evento, lo cual es correcto.
Por lo tanto, hay una manera de evitar la multiplicación de eventos múltiples?
- RadioButtons con TextView en RadioGroup
- RadioGroup extendiendo RelativeLayout?
- Cómo configurar el botón de radio marcado como predeterminado en radiogroup con Android
- Cómo configurar OnClickListener en un RadioButton en Android?
- Comprobación del campo vacío de RadioGroup mediante setError en Android
public class RadiogroupActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RadioGroup r = (RadioGroup) findViewById(R.id.radioGroup1); RadioButton b = (RadioButton) findViewById(R.id.radio1); r.setOnCheckedChangeListener(onPromobuttonsClick); r.check(R.id.radio1); } private OnCheckedChangeListener onPromobuttonsClick = new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Log.d("x", "x"); } }; }
- Sólo un botón de radio seleccionado a la vez
- Preparación del tipo de grupo de radio personalizado
- ¿Posible que todos los botones de radio no estén marcados en una aplicación para Android?
- RadioGroup con dos columnas que tienen diez RadioButtons
- ¿Cómo comprobar si un radiobutton está marcado en un radiogroup en Android?
- Cómo igualar espacio hacia fuera radiobuttons en Android?
- Grupo de radio no está recibiendo el foco en Android
- Cómo hacer RadioGroup botones de radio con imágenes en Android ... ¿Cómo?
Por lo tanto, hay una manera de evitar la multiplicación de eventos múltiples?
Llamar b.setChecked(true);
en lugar.
Una mirada rápida a través del código fuente confirma que RadioGroup#check()
realmente llama al OnCheckChangedListener tres veces …
- Cuando la selección actual está desactivada,
- Cuando se comprueba el nuevo RadioButton, y
- Cuando RadioGroup guarda qué RadioButton está marcado.
Curiosidad extraña.
Simplemente publique su r.setOnCheckedChangeListener(onPromobuttonsClick);
Línea en el método onResume()
. Es trabajos para mí.
Así que este es un viejo, pero también tengo un comportamiento similar. Una solución que encontré fue llamar al método toggle()
de RadioButton
lugar del método check()
de RadioGroup
.
Así que en este ejemplo, sólo tendrías que cambiar
r.check(R.id.radio1);
con
b.toggle();
Ya que b
ya es la vista con id R.id.radio1
.
Tuve este problema cuando quería registrar el análisis de las pulsaciones de botones de radio, pero la forma en que las llamadas de los grupos de radio se estaban manejando con .check()
causado onCheckedChangeListener
para llamar varias veces (que envió demasiados eventos).
Lo manejé de la siguiente manera para obtener sólo un evento por clic:
// create listeners so we don't duplicate the creation in for loop View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { // whatever you want to do here } }; // add on click listener to all radio buttons int buttonCount = buttonGroup.getChildCount(); for (int i = 0; i < buttonCount; i++) { if (buttonGroup.getChildAt(i) instanceof RadioButton) { buttonGroup.getChildAt(i).setOnClickListener(onClickListener); } }
- ¿Es posible desarrollar una aplicación para Android con Lua?
- IOS-como herramienta de guión gráfico para el proyecto de Android?