日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android 防重復點擊(Kotlin 協程實現 和 Handler實現)

作者:匆忙擁擠repeat 更新時間: 2022-07-18 編程語言

文章目錄

  • Kotlin 協程實現
    • 調用
  • Handler + Runnable 實現
    • 調用
  • 基于系統時間 實現
    • 調用
  • setTag/getTag 可能引發異常

考慮了,直接綁定 View#setOnClickListener 實現函數;或傳入View.OnClickListener 實例。

Kotlin 協程實現

在這里插入圖片描述

調用

mBind.btnJaClickA.debounceClick(lifecycleScope) { }
mBind.btnJaClickB.debounceClick(this) { }
mBind.btnJaClickC.debounceClick(lifecycleScope, originBlock = { })
mBind.btnJaClickD.debounceClick(this, originBlock = { })

本實現,會后觸發真實事件,連續點擊時,看到的日志是這樣的:

start
start
start
...
end

Handler + Runnable 實現

在這里插入圖片描述

除了構建一個全局的 handler 對象; 或可以直接使用 View內的handler實例。
eg. this.handler.postDelayed()

調用

mBind.btnJaClickD.debounceClickWidthHandler { }
mBind.btnJaClickE.debounceClickWidthHandler(originBlock = { })

本實現,會后觸發真實事件,連續點擊時,看到的日志是這樣的:

start
start  remove
start  remove
...
end

基于系統時間 實現

在這里插入圖片描述

調用

mBind.btnJaClickG.clickWithTrigger { }
mBind.btnJaClickH.clickWithTrigger(originBlock = { })

本實現,會先觸發真實事件,連續點擊時,看到的日志是這樣的:

start
end
start 
start 
...

setTag/getTag 可能引發異常

使用uuid-string,并獲取 其hashCode,作為tag的key值;或者使用一個固定的int值作為key值;可能會報異常:IllegalArgumentException: The key must be an application-specific resource id;
看這個異常說明,就是需要定義特定的 資源id ,來用作 setTag/getTag的key。

ids.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="job_id"/>
    <item type="id" name="runnable_id"/>
    <item type="id" name="trigger_last_time_id"/>
</resources>

應用:
setTag(R.id.job_id, obj)
getTag(R.id.job_id, obj)

原文鏈接:https://blog.csdn.net/jjwwmlp456/article/details/124897867

欄目分類
最近更新