美文网首页
RecyclerView 添加条目点击事件

RecyclerView 添加条目点击事件

作者: Obadiah | 来源:发表于2020-06-28 17:33 被阅读0次

    工具类

    /**
     * Created by yaochenhao on 2020/06/28.
     */
    import android.content.Context
    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.OnItemTouchListener
    
    
    class RecyclerItemClickListener(
        context: Context?,
        recyclerView: RecyclerView,
        private val mListener: OnItemClickListener?
    ) :
        OnItemTouchListener {
    
        interface OnItemClickListener {
            fun onItemClick(view: View?, position: Int)
            fun onLongItemClick(view: View?, position: Int)
        }
    
        var mGestureDetector: GestureDetector
        override fun onInterceptTouchEvent(view: RecyclerView, e: MotionEvent): Boolean {
            val childView = view.findChildViewUnder(e.x, e.y)
            if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
                mListener.onItemClick(childView, view.getChildAdapterPosition(childView))
                return true
            }
            return false
        }
    
        override fun onTouchEvent(view: RecyclerView, motionEvent: MotionEvent) {}
        override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}
    
        init {
            mGestureDetector = GestureDetector(context, object : SimpleOnGestureListener() {
                override fun onSingleTapUp(e: MotionEvent): Boolean {
                    return true
                }
    
                override fun onLongPress(e: MotionEvent) {
                    val child = recyclerView.findChildViewUnder(e.x, e.y)
                    if (child != null && mListener != null) {
                        mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child))
                    }
                }
            })
        }
    }
    

    使用

    recyclerView.addOnItemTouchListener(
        RecyclerItemClickListener(
            context,
            recyclerView,
            object : RecyclerItemClickListener.OnItemClickListener {
                override fun onItemClick(
                    view: View?,
                    position: Int
                ) {
                    toast(position.toString())
                }
    
                override fun onLongItemClick(
                    view: View?,
                    position: Int
                ) {
                }
            })
    )
    

    相关文章

      网友评论

          本文标题:RecyclerView 添加条目点击事件

          本文链接:https://www.haomeiwen.com/subject/bubwfktx.html