我正在尝试创建一个OnDoubleTapListener来检测下面的viewholder类内imageView(selectedImage)上的双标签。与代码中的setOnLongClickListener类似。recycleView适配器本身设置在一个片段中。
我已经看到了在片段中执行此操作的各种方法,但是我试图将实现保留在适配器中。
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var selectedImage: ImageView
var textTitle: TextView
var textDescription: TextView
init {
selectedImage = itemView.findViewById(R.id.imageSelected)
textTitle = itemView.findViewById(R.id.textTitle)
textDescription = itemView.findViewById(R.id.textDescription)
selectedImage.setOnLongClickListener {
doSomeThing()
true
}
}
}
我最终创建了一个GestureListener内部类,该内部类在ViewHolder中扩展了SimpleOnGestureListener。
为了只让'selectedImage'响应我在GestureListener中过量使用的'onDoubleTap',我已经'selectedImage'实现了setOnTouchListener并将事件传递给GestureDetector。
@SuppressLint("ClickableViewAccessibility")
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var selectedImage: ImageView
var textTitle: TextView
var textDescription: TextView
var gDetector: GestureDetector? = null
init {
selectedImage = itemView.findViewById(R.id.imageSelected)
textTitle = itemView.findViewById(R.id.textTitle)
textDescription = itemView.findViewById(R.id.textDescription)
gDetector = GestureDetector(selectedImage.context, GestureListener())
selectedImage.setOnTouchListener { v, event ->
gDetector?.onTouchEvent(event)
true
}
}
inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent?): Boolean {
//doSomething
return true
}
}