gpt4 book ai didi

android - 是否可以覆盖我的 android 应用程序中所有 View 的 onClick 监听器?

转载 作者:太空狗 更新时间:2023-10-29 14:35:55 25 4
gpt4 key购买 nike

activity A 上,我有一个名为 btnA 的按钮,只要单击它就会显示一个 activity B

但是如果我点击这个btnA 按钮的速度太快,比如在一秒钟内点击 2 次,那么将显示 2 个 activity B。显然。

我知道这个问题的解决方案是使用 RxBinding 或 Kotlin 协程去抖动 btnA 的点击监听器...

但是,如果我的应用程序中有 100 个 View ,它们的行为都与 btnA 一样怎么办。我怎样才能以某种方式覆盖或拦截他们的点击监听器以在一个地方应用去抖动?

编辑:我正在使用 Kotlin,这意味着我可以添加一个扩展函数来在 View 的点击监听器上应用去抖动逻辑,但是如果点击事件处理程序被 ButterKnife 或其他替代库绑定(bind),那将不起作用。这就是为什么我正在寻找一种方法来覆盖或拦截 View 的点击监听器。

此外,我认为创建某种 Root View /基础 View ,所有应用的 View 都将从中扩展可能有点矫枉过正。

目前这可能是不可能的,但不知何故我有一种冲动,那就是在某个地方有解决方案。

最佳答案

我不知道有什么方法可以全局覆盖所有点击监听器。很可能,这是不可能的。但是如果你使用 Kotlin,你可以这样做:

fun View.onClickThrottled(skipDurationMillis: Long = 750, action: () -> Unit) {
var isEnabled = true
this.setOnClickListener {
if (isEnabled) {
action()
isEnabled = false
Handler().postDelayed({ isEnabled = true }, skipDurationMillis)
}
}
}

然后,更改您的 View 以改用它,如下所示:

button.onClickThrottled {
//TODO - do something
}

关于android - 是否可以覆盖我的 android 应用程序中所有 View 的 onClick 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com