Alv*_*rez 12 android listener android-view onclicklistener butterknife
我正在查看生成的ButterKnife代码,并注意到对于@OnClick注释,它使用的是DebouncingOnClickListener由库实现的.
这是DebouncingOnClickListener为了避免在同一帧上使用该侦听器多次单击任何元素(实现此目的,它们使用静态标志).你可以在这里看到实现.
我试图找到一个解释,为什么他们决定在库管理的每个点击事件中使用它,但找不到任何.
那么,为什么他们使用它呢?为什么他们决定ButterKnife的每个用户都需要这个?不应该是决定使用它的用户?为什么要将视图绑定帮助它提供这个"功能"?如果我想在同一帧上多次点击,会发生什么?我无法使用ButterKnife进行点击活动.
我不假装冒犯,只想要一个解释,也许我错过了什么.
为什么他们决定ButterKnife的每个用户都需要这个?
假设您有一个按钮,此按钮上的单击事件将启动一个新活动.现在,当用户快速双击按钮时会发生什么?有一次机会,点击监听器将被触发两次,因此将启动2个活动,这是您最不希望的.
这样DebouncingOnClickListener做可以确保不会考虑后续的点击监听器.一旦第一次点击发生,后续点击将被忽略,直到下一帧,它们将被打开.
当您使用视图执行操作时,您正在发布一个事件MessageQueue.现在,当第一次点击发生时,您正在发布一个事件 - 启动新活动.并且您将立即在下一帧发布另一个事件 - 启用单击侦听器.第二个事件保证在第一个事件之后发生,因为已经post()编入队列.
如果我想在同一帧上多次点击,会发生什么?
如果您接受多个后续点击事件是可以接受的,那么您应该使用@OnTouch,因为您对触摸事件感兴趣而不是点击事件.
听听@Piwai关于碎片播客#88(从38:20开始)的案例的澄清.
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |