sy007 / DebouncePlugin

Android点击事件防抖动插件
Apache License 2.0
113 stars 16 forks source link

V1.1.3 CheckBox点击事件屏蔽之后,事件方法体被屏蔽但是CheckBox选中状态依旧改变的问题 #8

Closed ice-rain closed 1 year ago

ice-rain commented 1 year ago

CheckBox设置点击(选中)事件之后,时间间隔内连续点击的时候,事件方法体会按照设置的时间间隔间隔执行,但是每次点击依旧会改变CheckBox的选中状态,导致方法体执行时拿到的CheckBox状态与界面显示的CheckBox实际效果不同。

sy007 commented 1 year ago

你好,看你描述的这不是插件的问题哈。CheckBox选中事件回调是在控件状态已经改变的情况下,才会事件回调。所以在事件回调里面加入了防抖,拿到的状态就和界面显示的CheckBox实际效果不同。好奇,为什么要在CheckBox选中事件回调中加入防抖逻辑。

image
ice-rain commented 1 year ago

没有主动设置在CheckBox的选中事件回调中设置防抖,因该是CheckBox调用了onClick回调,然后被全局的默认设置切到了。

sy007 commented 1 year ago

没有主动设置在CheckBox的选中事件回调中设置防抖,因该是CheckBox调用了onClick回调,然后被全局的默认设置切到了。

奥,你的意思是你这边主动给CheckBox设置了setOnClickListener事件,然后被插入防抖逻辑了吗? 了解下是什么场景需要给CheckBox设置setOnClickListener事件。

ice-rain commented 1 year ago

目前用的地方是:“多级可展开CheckBox列表。支持父节点的全选筛选。”部分,所有CheckBox都是实现的setOnCLickListener接口,至于为什么没用setOnCheckedChangeListener事件,好像是因为选中状态变化时,处理子节点耗时有延迟,导致状态不匹配。具体不太清楚,不是我自己实现的,我只发现了被切到了出现一开始的不一致的问题,目前处理方式是在gradle配置中移除了采用这种方式实现的类。

sy007 commented 1 year ago

谢谢。 你这个场景可以尝试使用setOnCheckedChangeListener解决。下个版本计划提供一个运行时hook拦截功能,来处理某些情况下不需要防抖的场景。

sy007 commented 1 year ago

@ice-rain 你好,这个问题修复了,请按照README集成下。注意README中 **5.9 运行时二次拦截呢?** 有说明。