Tengo un botón con un OnClickListener. Para fines ilustrativos, considere un botón que muestra un cuadro de diálogo modal:Tratando de tocar rápidamente en los botones
public class SomeActivity ... {
protected void onCreate(Bundle state) {
super.onCreate(state);
findViewById(R.id.ok_button).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
// This should block input
new AlertDialog.Builder(SomeActivity.this)
.setCancelable(true)
.show();
}
});
}
En el uso normal, aparece el cuadro de diálogo de alerta y bloquea más de entrada. Los usuarios deben cerrar el cuadro de diálogo antes de que puedan tocar nuevamente el botón.
Pero a veces se llama dos veces al OnClickListener del botón antes de que aparezca el cuadro de diálogo. Puede duplicar esto con bastante facilidad tocando muy rápido en el botón. En general, tengo que intentarlo varias veces antes de que suceda, pero tarde o temprano activaré varias llamadas onClick (...) antes de que el cuadro de diálogo bloquee la entrada.
Veo este comportamiento en Android 2.1 en el teléfono Motorola Droid. Hemos recibido 4 informes de fallas en el mercado, lo que indica que esto sucede ocasionalmente a las personas.
Dependiendo de lo que haga nuestro OnClickListeners, esto causa todo tipo de estragos. ¿Cómo podemos garantizar que los cuadros de diálogo de bloqueo realmente bloqueen la entrada después del primer toque?
¿Intentó crear el AlertDialog fuera de OnClick() y simplemente llamó a show() dentro de onClick()? – jfpoilpret