¿Cuál es la mejor manera de evitar los doble clics en un botón en Android?
android
android-button
double-click
Androider
fuente
fuente
Respuestas:
Desactive el botón con
setEnabled(false)
hasta que sea seguro para el usuario volver a hacer clic en él.fuente
guardar un tiempo de último clic al hacer clic evitará este problema.
es decir
fuente
Mi solucion es
El uso es similar al de OnClickListener, pero reemplaza a onSingleClick () en su lugar:
fuente
Deshabilitar el botón o establecer que no se puede hacer clic no es suficiente si está haciendo un trabajo computacionalmente intensivo en onClick () ya que los eventos de clic se pueden poner en cola antes de que se pueda deshabilitar el botón. Escribí una clase base abstracta que implementa OnClickListener que puede anular en su lugar, que soluciona este problema ignorando los clics en cola:
El uso es el mismo que OnClickListener, pero reemplaza OnOneClick () en su lugar:
fuente
Puede hacerlo de manera muy elegante con Kotlin Extension Functions y RxBinding
o
y luego solo:
fuente
También me encontré con un problema similar, estaba mostrando algunos datepicker y timepickers donde a veces recibía clic 2 veces. Lo he resuelto con esto
Puede cambiar el tiempo según sus requisitos. Este método me funciona.
fuente
setEnabled(false)
funciona perfectamente para miLa idea es que escribo
{ setEnabled(true); }
al principio y solo lo hagofalse
con el primer clic del botón.fuente
Sé que es una pregunta antigua, pero comparto la mejor solución que encontré para resolver este problema común
Y en otro archivo, como Utils.java
fuente
La solución real a este problema es usar setEnabled (false) que atenúa el botón y setClickable (false) que hace que no se pueda recibir el segundo clic. He probado esto y parece ser muy efectivo.
fuente
Si alguien sigue buscando una respuesta breve, puede usar el siguiente código
Este código irá dentro de
if statement
cada vez que el usuario haga clic enView within 1 second
y luegoreturn;
se iniciará y el código adicional no se iniciará.fuente
los K magros Kotlin forma idiomática:
Uso:
fuente
Mi solución es intentar usar una
boolean
variable:Y usando lo siguiente:
ACTUALIZACIÓN : solución de Kotlin, usando la extensión de vista
fuente
Click Guard funciona bien con Butter Knife
fuente
En mi caso, estaba usando una vista de botón y estaba tomando los clics demasiado rápido. simplemente deshabilite el clic y habilítelo nuevamente después de unos segundos ...
Básicamente, hice una clase de contenedor que envuelve sus vistas en ClickListener. También puede establecer un retraso personalizado si lo desea.
y para llamarlo simplemente haz esto:
o proporcione su propio retraso:
ACTUALIZACIÓN: por encima de las formas un poco anticuadas ahora que RxJava es tan frecuente. Como otros han mencionado, en Android podríamos usar un acelerador para ralentizar los clics. Aquí hay un ejemplo:
puedes usar esta biblioteca para ello:
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
fuente
fuente
Puedes usar este método. Al utilizar la demora posterior, puede ocuparse de los eventos de doble clic.
void debounceEffectForClick (Ver vista) {
fuente
Extensión de Kotlin que permite un código en línea conciso y tiempos de espera de doble clic variables
Uso:
O
fuente
El código a continuación evitará que el usuario haga clic varias veces en fracciones de segundos y permitirá solo después de 3 segundos.
fuente
Parece que configurar tus escuchas de clics en onResume y anularlos en onPause también funciona.
fuente
Para mí, solo recordar la marca de tiempo y verificarlo (que pasó más de 1 segundo desde el clic anterior) me ayudó.
fuente
Espero que esto pueda ayudarte, pon el código en tu controlador de eventos.
// ------------------------------------------------ --------------------------------
fuente
No encontré que ninguna de estas sugerencias funcione si el método onClick no regresa de inmediato. Android pone en cola el evento táctil y se llama al siguiente onClick solo cuando finaliza el primero. (Como esto se hace en el único subproceso de la interfaz de usuario, esto es realmente normal). Necesitaba usar el tiempo cuando la función onClick está terminada + una variable booleana para marcar si el onClick dado se está ejecutando. Ambos atributos de marcador son estáticos para evitar que onClickListener se ejecute al mismo tiempo. (Si el usuario hace clic en otro botón) Puede simplemente reemplazar su OnClickListener a esta clase y, en lugar de implementar el método onClick, debe implementar el método abstracto oneClick ().
fuente
También puede usar enlaces rx de Jake Wharton para lograr esto. Aquí hay una muestra que rellena 2 segundos entre clics sucesivos:
// nota: ignore el Object v en este caso y creo que siempre.
fuente
fuente
Agregando a la respuesta de Jim, el código se puede hacer más conciso:
Uso:
fuente
En kotlin
fuente
Establecer Clickable en false no funciona en el primer doble clic, pero los siguientes dobles clics están bloqueados. Es como si el delegado de clic de carga la primera vez fuera más lento y el segundo clic se capture antes de que se complete el primero.
fuente
Solucioné este problema usando dos clases, una similar a las respuestas de @ jinshiyi11 y el anotador se basa en un clic explícito, en este solo puede hacer clic en un botón una vez, si desea otro clic debe indicarlo explícitamente .
Ejemplo de uso:
fuente
fuente
AtomicBoolean
realmente no podría ayudar.Intenta esto, está funcionando:
fuente