Android API 33下重写GestureDetector.OnGestureListener致Kotlin应用崩溃
解决API 33升级后GestureDetector onScroll空指针崩溃问题
问题根源
Android API 33对GestureDetector.OnGestureListener的onScroll方法签名做了变更:原API 32中被标记为可空的e1、e2参数(对应Java的@Nullable注解),在API 33中改为非空(@NonNull)。但系统部分场景下仍可能传入null值,Kotlin的非空类型检查会直接触发空指针异常。
修复方案
重写onScroll时,显式将参数声明为可空类型,添加注解抑制签名不匹配警告,并在方法内部做空值校验:
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") override fun onScroll( e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float ): Boolean { // 优先做空值校验,避免崩溃 if (e1 == null || e2 == null) { return false } // 这里编写你的滚动逻辑 return false }
补充说明
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")用于消除Kotlin因Java注解变更导致的签名不匹配警告,不影响代码运行逻辑。- 空值判断需放在方法最开头,确保后续业务逻辑不会接触到
null对象。 - 若你的业务逻辑不需要依赖
e1、e2参数,也可以直接返回false,省略额外判断步骤。
内容的提问来源于stack exchange,提问作者Marco Nicolas
相关产品推荐
相关产品推荐

