利用kotlin的拓展函數(shù)和拓展屬性輕而易舉實(shí)現(xiàn)點(diǎn)擊事件防重復(fù):
新建一個(gè)kt文件,復(fù)制以下代碼:
inline fun <T : View> T.singleClick(time: Long = 800, crossinline block: (T) -> Unit) {
setOnClickListener {
val currentTimeMillis = System.currentTimeMillis()
if (currentTimeMillis - lastClickTime > time || this is Checkable) {
lastClickTime = currentTimeMillis
block(this)
}
}
}
//兼容點(diǎn)擊事件設(shè)置為this的情況
fun <T : View> T.singleClick(onClickListener: View.OnClickListener, time: Long = 800) {
setOnClickListener {
val currentTimeMillis = System.currentTimeMillis()
if (currentTimeMillis - lastClickTime > time || this is Checkable) {
lastClickTime = currentTimeMillis
onClickListener.onClick(this)
}
}
}
var <T : View> T.lastClickTime: Long
set(value) = setTag(1766613352, value)
get() = getTag(1766613352) as? Long ?: 0
使用方法:
tvTest.singleClick(1500) {
Log.e("singClick",System.currentTimeMillis().toString())
}
//括號(hào)內(nèi)為間隔時(shí)間,可以忽略,默認(rèn)800
//或者
tvTest.singleClick {
Log.e("singClick",System.currentTimeMillis().toString())
}