es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo prevenir que se haga doble clic en un botón

Tengo un botón en mi actividad. Cuando el usuario hace clic en el botón, se muestra un progreso y se envía una solicitud al servidor. Después de recibir una respuesta a la solicitud, se oculta el progreso y se abre la siguiente actividad.
Sin embargo, si el usuario tiene tiempo para presionar el botón varias veces, se abrirán dos o más actividades.
Para evitar hacer doble clic, utilizo DebouncedOnClickListener. Aquí está mi código:

abstract class DebouncedOnClickListener protected constructor() : View.OnClickListener {
    private val minimumIntervalMillis: Long = 1000
    private val lastClickMap: MutableMap<view, long="">

    abstract fun onDebouncedClick(v: View?)

    override fun onClick(clickedView: View) {
        val previousClickTimestamp = lastClickMap[clickedView]
        val currentTimestamp = SystemClock.uptimeMillis()
        lastClickMap[clickedView] = currentTimestamp
        if (previousClickTimestamp == null || abs(currentTimestamp - previousClickTimestamp) > minimumIntervalMillis) {
            onDebouncedClick(clickedView)
        }
    }

    init {
        lastClickMap = WeakHashMap()
    }
}

Este método funciona en muchos casos. Sin embargo, la solicitud puede procesarse durante un tiempo desconocido. Y el usuario puede hacer clic en el botón mientras se completa la solicitud, se cerrará el progreso y se iniciará el proceso de apertura de la siguiente actividad. No sé cuánto tiempo puede tardar en lanzarse una nueva actividad y en ese momento puede ocurrir otro clic en el botón, lo que llevará posteriormente a la apertura de dos actividades.

¿Cómo se puede evitar hacer doble clic hasta que se abra la actividad, por favor ayúdeme?

P.D. Incluso cuando intento desactivar el botón, aún puede ocurrir un doble clic durante el lanzamiento de la actividad.</view,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar hacer doble clic hasta que se abra la actividad, puedes desactivar el botón una vez que se haya hecho clic y volver a activarlo una vez que se abra la siguiente actividad. Esto se puede lograr agregando el siguiente código en el método onDebouncedClick:

    override fun onDebouncedClick(v: View?) {
        v?.isEnabled = false // desactivar el botón cliqueado
        // mostrar la barra de progreso y enviar la solicitud al servidor
        // una vez que se complete la solicitud, ocultar la barra de progreso y abrir la siguiente actividad
        //...
        // activar el botón
        v?.isEnabled = true
    }
    

    Esto evitará que el usuario haga clic en el botón nuevamente hasta que se abra la siguiente actividad, evitando así la posibilidad de abrir múltiples actividades.

Comments are closed.