寫App時往往要考慮到使用者的諸多不良操作,其中一項就是要預防一些神經病無腦的發瘋式連續點擊。於是我們需要自定義一個監聽器,判斷使用者是不是在短時間內觸發同一顆按鈕兩次以上。
寫一個class,裡面定義一個方法來判斷是否快速連續點擊,是的話回傳true,否則回傳false。
class PreventFastDoubleClick(){
companion object{
private var lastClickTime:Long = 0
fun isFastDoubleClick():Boolean{
//取得現在時間
var time = System.currentTimeMillis()
//timeD :上次點擊時間與現在時間的時間差
var timeD = time - lastClickTime
if(timeD>0 && timeD<500){
//若小於0.5秒則判定是快速點擊
return true
}
else{
//若大於0.5秒,把現在時間設為上次點擊時間
lastClickTime = time
return false
}
}
}
}
//"->"後面表示要回傳的型態。Unit表示此方法不回傳值
//把function當成參數傳入另一個function,此為高階函式的用法。
//下一篇會詳細介紹高階函式ㄉ
fun View.setMyClickListener(a:() ->Unit ){
setOnClickListener {
if(!PreventFastDoubleClick.isFastDoubleClick()){
a.invoke()
}
else Toast.makeText(context,"你按太快了",Toast.LENGTH_SHORT).show()
}
}
這裡的btn是為你在layout裡面定義的按鈕id。
btn.setMyClickListener {
Toast.makeText(this,"你按了一下按鈕",Toast.LENGTH_SHORT).show()
}
```