【发布时间】:2019-05-09 04:50:58
【问题描述】:
在activity A上,我有一个名为btnA的按钮,只要点击它就会显示一个activity B。
但是,如果我点击这个 btnA 按钮的速度太快,比如一秒钟内点击 2 次,那么将显示 2 个 activity B。很明显。
我知道解决方案是使用 RxBinding 或 Kotlin 协程对 btnA 的点击监听器进行去抖动...
但是,如果在我的应用中有 100 个视图,它们的行为都像 btnA 一样。我怎样才能以某种方式覆盖或拦截他们的点击监听器以在一个地方应用去抖动?
编辑: 我正在使用 Kotlin,这意味着我可以添加一个扩展函数来在 View 的单击侦听器上应用去抖动逻辑,但如果单击事件处理程序由 ButterKnife 或其他替代库绑定,这将不起作用。这就是为什么我要找到一种方法来覆盖或拦截 View 的点击监听器。
另外,我认为创建某种根视图/基础视图,所有应用程序的视图都将从中扩展,这可能有点矫枉过正。
目前这可能是不可能的,但不知何故,我有一种冲动,希望在某个地方找到解决方案。
【问题讨论】:
-
您可以创建一个方法,该方法将具有视图或按钮的 onClickListener。并使用视图/按钮传递该方法。这样,您将拥有一个方法,并且可以在您的所有应用程序中使用它。但是当每个按钮都有不同的工作机制时,就会出现问题。 :)
-
@Umair - 如果我使用某种事件处理程序绑定库(如 ButterKnife),您的解决方案可能不起作用。
-
@Amit - 谢谢,但在活动中实现点击不是我想要的。假设我希望我的应用程序中的所有视图在点击时自行去抖动 1 秒。
-
@HauLuu 您可以创建自定义单击侦听器类,该类将实现 View.OnClickListener,您可以将逻辑放入其中并为所有视图设置此侦听器。然后您将在此调用中收到回调,该调用将独立于活动/片段。
标签: android android-view