【发布时间】:2022-01-21 12:19:26
【问题描述】:
我的活动中有一个按钮。当用户点击按钮时,会显示进度并向服务器发送请求,收到请求的响应后,会隐藏进度并打开下一个活动。 但是,如果用户有时间多次按下按钮,则会打开两个或更多活动。 为了防止双击,我使用 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()
}
}
这种方法在很多情况下都有效。但是,可以在未知的时间内处理该请求。并且用户可以在请求完成时点击按钮,进度将关闭,并开始打开下一个活动的过程。不知道一个新的activity可以启动多久,此时可以再次点击按钮,随后会导致两个activity的开启。
在活动打开之前如何避免双击,请帮助我。
附:即使我尝试禁用该按钮,在 Activity 启动期间仍然会发生双击
【问题讨论】:
-
我不太明白你遇到的问题,怎么会有人按两次?如果有人按下一个按钮,禁用它,显示加载,等待服务调用完成,然后处理api调用的响应,是不是很简单?
-
单击后禁用按钮,在 API 响应时重新启用
-
我更喜欢使用单击监听器developer.android.com/reference/android/view/… 并禁用按钮即点击触发
标签: android onclicklistener android-button double-click