RecyclerView添加Item的点击事件

来源:互联网 发布:淘宝信用查询网站 编辑:程序博客网 时间:2024/06/05 00:29

RecyclerView没有像ListView那样的ListView.setOnItemClickListener(),但是提供了RecyclerView.addOnItemTouchListener来设置监听。

步骤

声明ItemClick监听

public interface OnItemClickListener {    void onItemClick(View item, int position, long id);}public interface OnItemLongClickListener {    void onItemLongClick(View item, int position, long id);}

实现GestureDetector(或者GestureDetectorCompat)所需的接口

这是一个手势操作处理的工具类

    public SingleItemClickListener(Context context, final RecyclerView rv) {        gestureDetector = new GestureDetector(context,                new GestureDetector.SimpleOnGestureListener() {                    @Override                    public boolean onSingleTapUp(MotionEvent e) {                        //单击操作,根据手指坐标获取对应的Item                        View childView = rv.findChildViewUnder(e.getX(), e.getY());                        if (childView != null && onItemClickListener != null) {                            if (notifyAny || (childView.isEnabled() && childView.isClickable()))                                onItemClickListener.onItemClick(childView, rv.getChildLayoutPosition(childView), rv.getChildItemId(childView));                            return true;                        }                        return false;                    }                    @Override                    public void onLongPress(MotionEvent e) {                        //长按操作,根据手指坐标获取对应的Item                        View childView = rv.findChildViewUnder(e.getX(), e.getY());                        if (childView != null && onItemLongClickListener != null) {                            if (notifyAny || (childView.isEnabled() && childView.isClickable()))                                onItemLongClickListener.onItemLongClick(childView,                                        rv.getChildLayoutPosition(childView), rv.getChildItemId(childView));                        }                    }                });    }

实现RecyclerView.OnItemTouchListener

public class SingleItemClickListener implements RecyclerView.OnItemTouchListener {    private GestureDetector gestureDetector;    ...省略部分代码    @Override    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {        return gestureDetector.onTouchEvent(e);    }    @Override    public void onTouchEvent(RecyclerView rv, MotionEvent e) {    }    @Override    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {    }}

给RecyclerView添加监听

RecyclerView.addOnItemTouchListener(new SingleItemClickListener(context, rv, listener));

完整代码

0 0
原创粉丝点击