Saltar al contenido

Kotlin OnTouchListener llamado pero no anula performClick

Agradecemos tu apoyo para compartir nuestros ensayos en referencia a las ciencias informáticas.

Solución:

Prueba de esta manera:

 next.setOnTouchListener(object : View.OnTouchListener 
        override fun onTouch(v: View?, event: MotionEvent?): Boolean 
            when (event?.action) 
                MotionEvent.ACTION_DOWN -> //Do Something
            

            return v?.onTouchEvent(event) ?: true
        
    )

Bien, resolví mi propio problema anulando el oyente de OnTouch.

override fun onTouch(view: View, motionEvent: MotionEvent): Boolean 
    when (view) 
        next -> 
            Log.d("next", "yeyy")
            when (motionEvent.action)
                MotionEvent.ACTION_DOWN -> 
                    val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
                    icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
                    next.setImageDrawable(icon)
                
                MotionEvent.ACTION_UP -> 
                    view.performClick()
                    next.setImageResource(R.drawable.layer_bt_next)
                
            
        
        previous -> 
            //ingredients here XD
        
    
    return true

Y de esa manera, puedo llamar a onTouch único e implementarlo en muchos botones y también puedo usar onClick by:

view.performClick()

No olvides implementar:

View.OnTouchListener

Y configura el oyente:

next.setOnTouchListener(this)
previous.setOnTouchListener(this)

No creo que su solución realmente resuelva el problema presentado por la advertencia. La advertencia indica que ciertas funciones de accesibilidad utilizan performClick() para activar botones. Si miras en el View clase, la performClick() funciones llama a la onClickListener directamente, es decir, el código en el onTouchListener no se ejecutará (next.setImageResource(R.drawable.layer_bt_next)) para estas funciones de accesibilidad, ya que la vista nunca se tocará físicamente y, por lo tanto, su onTouch el código no se ejecutará. Tienes que hacer uno de estos:

  1. Subclase la vista que está configurando onTouchListener encendido y anulación performClick para ejecutar el código, o
  2. Establecer un onClickListener en la vista que ejecuta el código.

Podrías simplemente implementar onClickListener en su clase onTouchListener y llame manualmente onClick() de tu onTouchListener (donde tienes view.performClick() ahora), y luego mueva su código ejecutable a la onClick anular. También tendría que configurar AMBOS onTouchListener y onClickListener en tus puntos de vista.

Reseñas y valoraciones de la guía

Si te ha resultado de provecho nuestro artículo, agradeceríamos que lo compartas con otros seniors y nos ayudes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *