Android RecyclerView基于GestureDetector,SimpleOnItemTouchListener简洁OnItemClick(position)实现,Kotlin

Android RecyclerView基于GestureDetector,SimpleOnItemTouchListener简洁OnItemClick(position)实现,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?) {

    }
}

上层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?) {
                //单击回调
            }
        })

上述实现,比下面的这种实现更简洁。

Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类-CSDN博客文章浏览阅读4.2k次,点赞2次,收藏3次。Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类我写的附录文章2,介绍了Android如何基于OnItemTouchListener +GestureDetector实现单击、长按事件的监听,由于如今RecyclerView在Android开发是如此的普遍,以及Recyclehttps://blog.csdn.net/zhangphil/article/details/53231344

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/134572499