Android Button setOnClickListener点击事件偶发不生效问题
问题根因
点击事件触发不稳定的核心原因是控件ID绑定错误:
- XML布局中占满全屏的根
RelativeLayout被设置了idsavebtn - 页面上实际显示的「保存」按钮没有配置任何id
- 代码中
binding.savebtn实际绑定的是整个根布局,而非你预期的保存按钮。只有点击到根布局未被子控件遮挡的区域时才会触发回调,点击实际按钮位置时,点击事件被无监听的Button消费,自然不会有响应,这才会出现偶发触发、多次按压才生效的现象。
修复方案
1. 调整XML布局的ID配置
首先删除根RelativeLayout节点上的android:id="@+id/savebtn"属性,给真正的保存Button加上该id,修正后的Button代码如下:
<Button android:id="@+id/savebtn" android:layout_width="100dp" android:layout_height="50dp" android:elevation="15dp" android:background="#1966FB" android:layout_gravity="right" android:text="Save" />
额外注意:elevation(阴影高度)属性的单位需要使用dp,你原来写的sp是字体专用单位,用在这里会导致不同系统字体设置下按钮阴影渲染异常
2. (可选)增加重复点击拦截
如果需要避免用户快速连续点击触发多次保存请求,可以在点击回调触发后先将按钮置为不可点击状态,等数据提交完成后再恢复可点击状态。
内容的提问来源于stack exchange,提问作者ratim shariar
相关产品推荐
相关产品推荐

