在阅读了雅各布在RecyclerView onClick question上的解决方案后,我尝试在“双击”事件中扩展他的解决方案。当我将回收器视图注册到单击和双击侦听器时,onDoubleClick()被正确调用,但当用户双击时也会调用onClick(),这是我想要避免的。我希望如果检测到双击事件,则不会检测到单击事件。
下面是我的双击监听器的代码,改编自雅各布的解决方案:
public class RecyclerItemDoubleClickListener implements RecyclerView.OnItemTouchListener {
private OnItemDoubleClickListener doubleClickListener;
public interface OnItemDoubleClickListener {
public void onItemDoubleClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemDoubleClickListener(Context context, OnItemDoubleClickListener listener) {
doubleClickListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onDoubleTap(MotionEvent e) {
return true;
}
});
}
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && doubleClickListener != null && mGestureDetector.onTouchEvent(e)) {
doubleClickListener.onItemDoubleClick(childView, view.getChildPosition(childView));
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
}我只是简单地注册如下:
recyclerView.addOnItemTouchListener(new RecyclerItemDoubleClickListener(
this, new RecyclerItemDoubleClickListener.OnItemDoubleClickListener() {
@Override
public void onItemDoubleClick(View view, int position) {
Toast.makeText(ActivityMain.this, "double click " + position, Toast.LENGTH_SHORT).show();
}
}));
recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(
this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(ActivityMain.this, "single click " + position, Toast.LENGTH_SHORT).show();
}
}));你会怎么处理这件事?
PS :我也想检测"longClick",“向左滑动”,“向右滑动”在同一回收查看项目独立。但是我想我自己写的代码可能太多了。我将等待图书馆或谷歌提供它。
发布于 2014-12-03 21:17:43
使用GestureListener的onSingleTapConfirmed()方法来区分singleTap和DoubleTap。
http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html#onSingleTapConfirmed%28android.view.MotionEvent%29
要检测左右滑动,请使用GestureListener的onFling()
在onFling中使用以下代码
if(motionEvent.getX() - motionEvent.getX() > SWIPE_MIN_DISTANCE ) { onSwipeRightToLeft(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE ) { onSwipeLeftToRight(); }
发布于 2015-12-07 11:29:55
您可以使用ItemTouchHelper向RecyclerView添加swipe以解除和拖放支持。
https://stackoverflow.com/questions/26933579
复制相似问题