博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView点击事件与长按事件
阅读量:3984 次
发布时间:2019-05-24

本文共 2566 字,大约阅读时间需要 8 分钟。

转自:http://m.blog.csdn.net/article/details?id=51332411

最近开始使用RecyclerView了。RecyclerView很是强大,不过官方不提供点击事件。

在网上找了一下实现方法,有的说在adapter里添加回调接口来实现点击事件与长按事件。 
不过经过测试,有时候会产生这样的现象:点击item跳转到下一个页面,再返回回来时, 
item的点击事件会失效。后来在Stack Overflow找到了新的方法。 
这里 贴上代码:

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
public interface OnItemClickListener {
void onItemClick(View view, int position); void onItemLongClick(View view, int position); } private OnItemClickListener mListener; private 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 childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null) { mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView)); } } }); } @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 false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

然后在activity中添加事件即可

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), recyclerView, new RecyclerItemClickListener.OnItemClickListener() {    @Override    public void onItemClick(View view, int position) {        // ...    }    @Override    public void onItemLongClick(View view, int position) {        // ...    }}));
你可能感兴趣的文章
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
imx6 项目的按键驱动程序
查看>>
busybox passwd修改密码
查看>>
wpa_supplicant控制脚本
查看>>
rfkill: WLAN hard blocked
查看>>
gstreamer相关工具集合
查看>>
gstreamer 捕获图像+存储示例代码
查看>>
arm 自动升级脚本
查看>>
RS232 四入四出模块控制代码
查看>>
gstreamer插件之 videotestsrc
查看>>
gstreamer插件之 v4l2src
查看>>
autoupdate script
查看>>
EAVCapture项目中的开机自动升级脚本
查看>>
在linux2.6内核中加入自己的驱动
查看>>
i.MX53的启动模式
查看>>
uboot mkimage load address entry address
查看>>
i.mx53 nand flash partitions
查看>>
地址的再次整理与总结
查看>>
对Freescale i.mx53 ADC驱动程序的透彻分析
查看>>