Android长按操作时performLongClick()未触发但OnLongClickListener已响应问题
问题原因分析
核心原因是重载方法不匹配,具体如下:
- Android 框架存在两个
performLongClick重载方法,触发场景差异极大:- 无参版本
performLongClick():从API 1开始就存在,是普通用户长按操作时系统默认调用的核心方法,OnLongClickListener的回调逻辑也是在这个方法的内部实现中触发的 - 带坐标参数版本
performLongClick(float x, float y):API 24才新增的方法,仅在辅助功能触发、上下文菜单关联精准坐标等少数特殊场景下会被调用,普通用户长按操作不会触发该方法
- 无参版本
- 若测试设备系统版本低于API 24,该带参数方法本身就不存在,系统永远不会调用你重写的实现。
修复方案
同时重写两个重载方法,统一处理长按标记逻辑即可:
@Override public boolean performLongClick() { boolean result = super.performLongClick(); mHasPerformedLongPress = true; return result; } @Override public boolean performLongClick(float x, float y) { boolean result = super.performLongClick(x, y); mHasPerformedLongPress = true; return result; }
如果逻辑复杂度较高,也可以把标记逻辑封装为独立方法,避免重复代码。
内容的提问来源于stack exchange,提问作者Master Qiao
相关产品推荐
相关产品推荐

