首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView onDoubleClick和onClick

RecyclerView onDoubleClick和onClick
EN

Stack Overflow用户
提问于 2014-11-14 23:39:33
回答 2查看 4K关注 0票数 2

在阅读了雅各布在RecyclerView onClick question上的解决方案后,我尝试在“双击”事件中扩展他的解决方案。当我将回收器视图注册到单击和双击侦听器时,onDoubleClick()被正确调用,但当用户双击时也会调用onClick(),这是我想要避免的。我希望如果检测到双击事件,则不会检测到单击事件。

下面是我的双击监听器的代码,改编自雅各布的解决方案:

代码语言:javascript
复制
 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) { }
}

我只是简单地注册如下:

代码语言:javascript
复制
    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",“向左滑动”,“向右滑动”在同一回收查看项目独立。但是我想我自己写的代码可能太多了。我将等待图书馆或谷歌提供它。

EN

回答 2

Stack Overflow用户

发布于 2014-12-03 21:17:43

使用GestureListeneronSingleTapConfirmed()方法来区分singleTap和DoubleTap。

http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html#onSingleTapConfirmed%28android.view.MotionEvent%29

要检测左右滑动,请使用GestureListeneronFling()

在onFling中使用以下代码

if(motionEvent.getX() - motionEvent.getX() > SWIPE_MIN_DISTANCE ) { onSwipeRightToLeft(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE ) { onSwipeLeftToRight(); }

票数 1
EN

Stack Overflow用户

发布于 2015-12-07 11:29:55

您可以使用ItemTouchHelper向RecyclerView添加swipe以解除和拖放支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26933579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档