接到一个新需求,要求实现控件 RecyclerView 的 item 的单击和双击事件的监听,
开始时候通过实现 OnTouchListener 监听实现了需求,点击是没有问题的,
可是测试时候发现 RecyclerView 滑动的时候就也会触发这个点击事件,
应该是我没处理事件的结果.后来索性查资料换个了方法,直接实现OnClickListener
监听改变一下.就不会有这个问题了. 用法和正常的点击监听相同,实现回调就好.
以下代码:
public class DoubleClickListener implements View.OnClickListener {
//记录连续点击次数
private int clickCount = 0;
private Handler handler;
private DoubleClickCallBack myClickCallBack;
public interface DoubleClickCallBack {
//点击一次的回调
void oneClick(View view);
//连续点击两次的回调
void doubleClick(View view);
}
public DoubleClickListener(DoubleClickListener.DoubleClickCallBack myClickCallBack) {
this.myClickCallBack = myClickCallBack;
handler = new Handler();
}
@Override
public void onClick(View v) {
clickCount++;
//双击间二百毫秒延时
int timeout = 200;
handler.postDelayed(() -> {
if (clickCount == 1) {
myClickCallBack.oneClick(v);
} else if (clickCount == 2) {
myClickCallBack.doubleClick(v);
}
//清空handler延时,并防内存泄漏
handler.removeCallbacksAndMessages(null);
//计数清零
clickCount = 0;
}, timeout);//延时timeout后执行run方法中的代码
}
}
参考文章:https://blog.csdn.net/htwhtw123/article/details/80150984
希望能对大家有所帮助,欢迎大家一起讨论交流。