在閱讀Jacob的解決方案RecyclerView onClick question後,我試圖擴展他的「雙擊」事件的解決方案。當我將recyclerview註冊到單擊和雙擊監聽器時,正確調用onDoubleClick(),但在用戶雙擊時也會調用onClick(),這是我想要避免的。我希望如果檢測到雙擊事件,就不會檢測到單擊事件。RecyclerView 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:我也想單獨檢測同一個recyclerview項目上的「longClick」,「向左滑動」,「向右滑動」。但我想這可能太多,我自己編碼。我會等待圖書館或谷歌提供它。