工具类
/**
* 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
) {
}
})
)