recyclerview item点击防抖
时间: 2023-08-01 16:13:22 浏览: 50
为了防止 RecyclerView item 点击事件多次触发,可以使用防抖技术。防抖是指在一定时间内,只执行最后一次操作的技术。
可以通过如下方式实现 RecyclerView item 点击防抖:
1. 定义一个变量 lastClickTime,表示上一次点击的时间。
2. 在 item 点击事件中,获取当前时间 currentTime。
3. 判断 currentTime 和 lastClickTime 的时间差是否小于设定的时间阈值,如果小于,则表示触发了重复点击,不执行操作;如果大于等于,则执行操作。
4. 在操作执行完之后,更新 lastClickTime 为 currentTime。
以下是一个示例代码:
```
private var lastClickTime = 0L
private val debounceTime = 500L // 设定的防抖时间阈值,单位为毫秒
recyclerView.addOnItemClickListener { position ->
val currentTime = System.currentTimeMillis()
if (currentTime - lastClickTime >= debounceTime) {
// 执行操作
// ...
}
lastClickTime = currentTime
}
private fun RecyclerView.addOnItemClickListener(onItemClick: (position: Int) -> Unit) {
this.addOnChildAttachStateChangeListener(object : RecyclerView.OnChildAttachStateChangeListener {
override fun onChildViewAttachedToWindow(view: View) {
view.setOnClickListener {
val holder = getChildViewHolder(view)
onItemClick(holder.adapterPosition)
}
}
override fun onChildViewDetachedFromWindow(view: View) {
view.setOnClickListener(null)
}
})
}
```
其中,addOnItemClickListener 函数是一个扩展函数,用于给 RecyclerView 添加 item 点击监听。在该函数中,通过 addOnChildAttachStateChangeListener 监听 item 的添加和移除操作,从而给每个 item 添加点击监听。在点击事件中,通过 System.currentTimeMillis() 获取当前时间,然后根据时间差判断是否触发了重复点击。