Un botón desencadena una acción que solo debe invocarse una vez. El botón está desactivado y escondido en el controlador onClick antes de realizar la acción:Android: evitar múltiples eventos onClick en un botón (que se ha deshabilitado)
someButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
someButton.setEnabled(false);
someButton.setClickable(false);
someButton.setVisibility(View.GONE);
performTaskOnce();
}
});
private void performTaskOnce() {
Log.i("myapp", "Performing task");
//Do something nontrivial that takes a few ms (like changing the view hierarchy)
}
pesar de que el botón se desactiva de inmediato, no obstante es posible disparar múltiples eventos "onclick" pulsando varias veces muy rápidamente. (es decir, performTaskOnce
se llama varias veces). Parece que los eventos onClick están en cola antes de que el botón esté realmente desactivado.
Podría solucionar el problema marcando en cada uno de los controles onClick si el botón correspondiente ya está desactivado, pero parece un truco. ¿Hay alguna forma mejor de evitar este problema?
El problema ocurre en Android 2.3.6, no puedo reproducirlo en Android 4.0.3. Pero dada la rareza de los dispositivos 4.x, no es una opción excluir los dispositivos más antiguos.
ese problema me molestaba por días .. – mohnage7