检测RecyclerView Adapter的ViewHolder类中的双击

问题描述 投票:0回答:1

我正在尝试创建一个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
          }
        }

    }
android android-fragments kotlin android-recyclerview android-viewholder
1个回答
0
投票

我最终创建了一个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
            }
        } 

© www.soinside.com 2019 - 2024. All rights reserved.