RecyclerView添加点击事件监听器
实现RecyclerView.OnItemTouchListener的项目触摸监听器:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
  private OnItemClickListener mListener;
  public interface OnItemClickListener {
    public void onItemClick(View view, int position);
    public void onLongItemClick(View view, int position);
  }
  GestureDetector mGestureDetector;
  public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
        @Override
        public void onLongPress(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && mListener != null) {
                mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
            }
        }
    });
}
  @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
      mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
      return true;
    }
    return false;
  }
  @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
  @Override
  public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}
OnItemClickListener 接口提供了两个方法:
- onItemClick:监听点击事件
- onLongItemClick:监听长按事件,其中长按时间使用GestureDetector来监听
点击事件可以在这两个方法里做处理。
使用
RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
      @Override public void onItemClick(View view, int position) {
        // 点击事件处理
      }
      @Override public void onLongItemClick(View view, int position) {
        // 长按事件处理
      }
    })
);
 
             
             
             
             
            