Comment annuler performClick dans Kotlin pour éviter les avertissements.
next.setOnTouchListener(View.OnTouchListener { view, motionEvent ->
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)
}
}
return@OnTouchListener true
})
view.performClick ne fonctionne pas.
D'accord, j'ai résolu mon propre problème en ignorant le programme d'écoute 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
}
Et de cette façon, je peux appeler single onTouch et l'implémenter sur de nombreux boutons et également utiliser onClick en:
view.performClick()
N'oubliez pas de mettre en œuvre:
View.OnTouchListener
Et définissez l'auditeur:
next.setOnTouchListener(this)
previous.setOnTouchListener(this)
Essayez de cette façon:
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
}
})
Je ne pense pas que votre solution résoudra réellement le problème présenté par l'avertissement. L'avertissement indique que certaines fonctions d'accessibilité utilisent performClick()
pour activer les boutons. Si vous regardez dans la classe View
, les fonctions performClick()
appellent directement onClickListener
, ce qui signifie que le code de la onTouchListener
ne sera pas exécuté (next.setImageResource(R.drawable.layer_bt_next)
) pour ces fonctions d’accessibilité, car la vue ne sera jamais physiquement touchée et votre code onTouch
sera donc gagné ' t courir. Vous devez faire l’un des choix suivants:
onTouchListener
et remplacez performClick
pour exécuter le code, ouonClickListener
sur la vue qui exécute le code.Vous pouvez simplement implémenter onClickListener
dans votre classe onTouchListener et appeler manuellement onClick()
à partir de votre onTouchListener
(où vous avez maintenant view.performClick()
), puis déplacez votre code exécutable sur le remplacement onClick
. Vous devez également définir BOTH onTouchListener
and onClickListener
sur vos vues.
Je ne suis pas sûr que ce soit le même problème que vous avez vu, mais depuis que j'ai trouvé cette page à la recherche de mon problème, j'ai pensé ajouter mon expérience pour aider les autres :)
Dans mon cas, l'avertissement était généré car la vue nullable pouvait être de type Void
. Appelant le suivant:
nullableView?.setOnTouchListener(this)
a produit l'erreur:
Custom view Void has setOnTouchListener called on it but does not override performClick
Effectuer une vérification nulle et transtyper une View
avant de régler l'auditeur résolu pour moi dans ce cas, puisque View
remplacera performClick
:
if (nullableView != null) (nullableView as View).setOnTouchListener(this)