Android RecyclerView is based on GestureDetector, SimpleOnItemTouchListener simple OnItemClick(position) implementation, Kotlin

Android RecyclerView is based on GestureDetector, SimpleOnItemTouchListener simple OnItemClick(position) implementation, Kotlin

import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
import android.view.MotionEvent
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SimpleOnItemTouchListener

open class RVOnItemClickListener() : SimpleOnItemTouchListener() {
    private var mGestureDetector: GestureDetector? = null

    constructor(recyclerView: RecyclerView) : this() {
        mGestureDetector =
            GestureDetector(recyclerView.context, object : SimpleOnGestureListener() {
                //长按
                override fun onLongPress(e: MotionEvent) {
                    super.onLongPress(e)

                    val childView = recyclerView.findChildViewUnder(e.x, e.y)
                    if (childView != null) {
                        val position = recyclerView.getChildLayoutPosition(childView)

                        onItemLongClick(position, childView)
                    }
                }

                //单击
                override fun onSingleTapUp(e: MotionEvent): Boolean {
                    val childView = recyclerView.findChildViewUnder(e.x, e.y)
                    if (childView != null) {
                        val position = recyclerView.getChildLayoutPosition(childView)

                        onItemClick(position, childView)

                        return true
                    }

                    return super.onSingleTapUp(e)
                }
            })
    }

    override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
        return mGestureDetector?.onTouchEvent(e)!!
    }

    //长按
    open fun onItemLongClick(position: Int, view: View?) {

    }

    //单击事件接口
    open fun onItemClick(position: Int, view: View?) {

    }
}

How to use the upper RecyclerView:

        val mRecyclerView = findViewById<RecyclerView>(R.id.recycler_view)
        val layoutManager = GridLayoutManager(this, GRID_SIZE)
        mRecyclerView?.layoutManager = layoutManager

        val adapter = MyAdapter()
        mRecyclerView?.adapter = adapter

        mRecyclerView.addOnItemTouchListener(object : RVOnItemClickListener(mRecyclerView) {
            override fun onItemClick(position: Int, view: View?) {
                //单击回调
            }
        })

The above implementation is more concise than the following implementation.

Android RecyclerView click and long press events: based on OnItemTouchListener + GestureDetector standard implementation (2), encapsulated and extracted into general tool classes - CSDN Blog The article has been viewed 4.2k times, click Liked 2 times and collected 3 times. Android RecyclerView click and long press events: based on OnItemTouchListener + GestureDetector standard implementation (2), encapsulated and extracted into a general tool class. The appendix article 2 I wrote introduces how Android implements click and long press events based on OnItemTouchListener + GestureDetector. Monitoring, because RecyclerView is so common in Android development nowadays, and Recyclehttps://blog.csdn.net/zhangphil/article/details/53231344

Guess you like

Origin blog.csdn.net/zhangphil/article/details/134572499