我的活動中有一個按鈕。當用戶單擊按鈕時,顯示進度并向服務器發送請求,在收到對請求的回應后,隱藏進度并打開下一個活動。但是,如果用戶有時間多次按下按鈕,則會打開兩個或更多活動。為了防止雙擊,我使用 DebouncedOnClickListener。這是我的代碼:
abstract class DebouncedOnClickListener protected constructor() : View.OnClickListener {
private val minimumIntervalMillis: Long = 1000
private val lastClickMap: MutableMap<View, Long>
abstract fun onDebouncedClick(v: View?)
override fun onClick(clickedView: View) {
val previousClickTimestamp = lastClickMap[clickedView]
val currentTimestamp = SystemClock.uptimeMillis()
lastClickMap[clickedView] = currentTimestamp
if (previousClickTimestamp == null || abs(currentTimestamp - previousClickTimestamp) > minimumIntervalMillis) {
onDebouncedClick(clickedView)
}
}
init {
lastClickMap = WeakHashMap()
}
}
這種方法在很多情況下都有效。但是,可以在未知的時間內處理請求。并且用戶可以在請求完成時點擊按鈕,進度將被關閉并開始打開下一個活動的程序。不知道一個新的活動多久可以啟動,此時又可以再次點擊按鈕,這會導致兩個活動的開啟。
在活動打開之前如何避免雙擊,請幫助我。
PS即使當我嘗試禁用按鈕時,在活動啟動期間仍然會發生雙擊
uj5u.com熱心網友回復:
只需將其粘貼到按鈕單擊
button.setEnabled(false);
uj5u.com熱心網友回復:
您可以使用如下所示的布爾標志。
private val onClicked: Boolean = false
override fun onClick(clickedView: View) {
if(!onClicked) {
onClicked = true
// Do something
onClicked = false
}
}
uj5u.com熱心網友回復:
在 Utils 中添加所需的函式,并在需要的地方通過將視圖作為引數傳遞來呼叫它。
const val DIGIT_THOUSAND = 1000
fun preventMultipleTap(view: View) {
preventMultipleTap(view, DIGIT_THOUSAND.toLong())
}
fun preventMultipleTap(view: View, delayInMillis: Long) {
view.isEnabled = false
view.postDelayed({ view.isEnabled = true }, delayInMillis)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386351.html
標籤:安卓 点击监听器 android-button 双击
上一篇:如果為應用授予START_ACTIVITIES_FROM_BACKGROUND,則從前臺服務啟動相機(Android11 )
下一篇:為改變布局高度添加影片
