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?
- Grupo de radio no está recibiendo el foco en Android
- grupo de radio setOnCheckedChangeListener
- android onCheckedChanged para el radiogrupo
- RadioButton con vista personalizada de Android
- ¿Posible que todos los botones de radio no estén marcados en una aplicación para 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"); } }; }
- Cómo configurar el botón de radio marcado como predeterminado en radiogroup con Android
- RadioGroup con dos columnas que tienen diez RadioButtons
- Radiogrupo Android, divisor entre los botones de radio
- ¿Cómo comprobar si un radiobutton está marcado en un radiogroup en Android?
- Cómo configurar OnClickListener en un RadioButton en Android?
- Preparación del tipo de grupo de radio personalizado
- Diseño personalizado para RadioButton
- RadioButtons con TextView en RadioGroup
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?