拦截recyclerview 的item 的点击事件

简介:
复制代码
recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(),recyclerview, new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.e("hello","hello");
            }
        }));


/**
 * 拦截Recycler的item的点击事件
 */
public static 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){}
}
复制代码
相关文章
ScrollView和HorizontalScrollView无法设置点击事件的源码解析
最近的开发过程中,发现存在ScrollView和HorizontalScrollView无法设置点击事件的现象。 我们知道,通常在设置点击事件时,位于View树上方的子View的OnClickListener,会优先于父View的OnClickListener执行。 开发过程中我们会经常使用类似的方式来给布局设置点击事件,比如给ListView的Item背景设置OnClickListener,用于点击item空白区域的跳转操作;然后再给item内部的子元素分别设置OnClickListener用于各自不同的点击操作。
|
Java Android开发 Python
RecyclerView实现多type页面
目录介绍 01.先看看实际需求 02.adapter实现多个type 03.这样写的弊端 04.如何优雅实现adapter封装 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也...
978 0
|
Android开发
解析6种常用View 的滑动方法
  > View 的滑动是Android 实现自定义控件的基础,实现View 滑动有很多种方法,在这里主要讲解6 种滑动方法,分别是layout()、offsetLeftAndRight()与offsetTopAndBottom()、LayoutParams、动画、scollTo 与scollBy,以及Scroller。
1566 0
|
Android开发
view.performClick()触发点击事件
1、主要作用      自动触发控件的点击事件 2、界面的布局文件  activity_main.xml 3、MainActivity 代码     package com.
1344 0
|
前端开发 Android开发
RecycleView的使用,并添加子item的点击事件
1.导入 compile ‘com.android.support:recyclerview-v7:23.3.0’ 2.准备工作(间隔) import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import
1740 0
|
Android开发 数据格式 XML
RecyclerView点击事件
package zhangphil.myrecyclerview; import android.support.v7.
782 0