RecyclerView Item 点击事件监听,只在可以触屏的设备上有用;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;import androidx.core.view.GestureDetectorCompat;
import androidx.recyclerview.widget.RecyclerView;/*** */
public abstract class RecyclerViewItemTouchListener implements RecyclerView.OnItemTouchListener {private GestureDetectorCompat mGestureDetectorCompat;private RecyclerView mRecyclerView;public RecyclerViewItemTouchListener(RecyclerView recyclerView) {mRecyclerView = recyclerView;mGestureDetectorCompat = new GestureDetectorCompat(mRecyclerView.getContext(), new MyGestureListener());}@Overridepublic void onTouchEvent(RecyclerView recyclerView, MotionEvent e) {mGestureDetectorCompat.onTouchEvent(e);}@Overridepublic boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent e) {mGestureDetectorCompat.onTouchEvent(e);return false;}@Overridepublic void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}class MyGestureListener extends GestureDetector.SimpleOnGestureListener {@Overridepublic boolean onSingleTapUp(MotionEvent e) {View child = mRecyclerView.findChildViewUnder(e.getX(), e.getY());if (child != null) {RecyclerView.ViewHolder viewHolder = mRecyclerView.getChildViewHolder(child);onItemClick(viewHolder);}return true;}@Overridepublic void onLongPress(MotionEvent e) {View childe = mRecyclerView.findChildViewUnder(e.getX(), e.getY());if (childe != null) {RecyclerView.ViewHolder viewHolder = mRecyclerView.getChildViewHolder(childe);onItemLongClick(viewHolder);}}}/*** 点击事件* @param viewHolder*/public abstract void onItemClick(RecyclerView.ViewHolder viewHolder);/*** 长按时间* @param viewHolder*/public abstract void onItemLongClick(RecyclerView.ViewHolder viewHolder);
}