今天讲一下RecyclerView这个控件,使得不点击里面的item,只点击RecyclerView,写了demo随便看看哈~~~首先先分析为什么我们设置了Recyclerview.setOnClickListener确没办法响应。其实可以看一下源码。
里面源码有这个也有点击事件的。其实直观的分析其实就是点击事件在item里面所以不在RecyclerView,里面也有这个方法的调用,导致RecyclerView的点击事件没办法继续进行。
所以这边呢,我冲这个OnItemTouchListtener这个入手看下面代码:
public static class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnClickListener mListener;
public interface OnClickListener {
public void onClick(View view);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
}
});
}
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
if (view != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onClick(view);
return true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}
}
我们自己写一个虽然里面我们也设置成为onClick设置为我们需要的点击事件。
这个时候我们写好了点击事件。但是我这边写的是一个内部类。。。。。
所以你们看着使用
第二步就是调入代码了呗
mRecyclerview.addOnItemTouchListener(new RecyclerItemClickListener(this,mRecyclerview, new RecyclerItemClickListener.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context,"hello",Toast.LENGTH_LONG).show();
}
}));
原本这个是Item这个的点击事件。。。然后我改成了Recyclerview的点击事件了。。所以还是会保留一下Item这个名称- -
然后加到这边了。。其实差不多咯。
效果如下: