繁体   English   中英

GestureDetector.OnGestureListener 覆盖的方法在 Android API 33 中不起作用

[英]GestureDetector.OnGestureListener overridden methods are not working in Android API 33

我已经在我的 Activity 上实现了接口 GestureDetector.OnGestureListener。 它在 Android API 32 上运行良好,但在将 Android API 级别从 32 更新到 33 后,我无法覆盖它的方法。 当我回滚到 Android API 32 时,它工作正常。

这是我实现接口的方式:

class ABCActivity: AppCompatActivity(), GestureDetector.OnGestureListener {
    
    override fun onDown(p0: MotionEvent?): Boolean = false

    override fun onShowPress(p0: MotionEvent?) = Unit

    override fun onSingleTapUp(p0: MotionEvent?): Boolean = false

    override fun onLongPress(p0: MotionEvent?) = Unit

    override fun onFling(p0: MotionEvent?, p1: MotionEvent?, p2: Float, p3: Float): Boolean = false

    override fun onScroll(
        event: MotionEvent?,
        event1: MotionEvent?,
        distanceX: Float,
        distanceY: Float
    ): Boolean {
        // My Logic
    }
}

好的,我自己发现上面的代码与 API 32 级完美配合,导致 API 33 级出现问题,原因是? 带有MotionEvent的运算符。 我刚刚删除了它,它也适用于 API 33 级。 新代码如下所示。

class ABCActivity: AppCompatActivity(), GestureDetector.OnGestureListener {

    override fun onDown(p0: MotionEvent): Boolean = false

    override fun onShowPress(p0: MotionEvent) = Unit

    override fun onSingleTapUp(p0: MotionEvent): Boolean = false

    override fun onLongPress(p0: MotionEvent) = Unit

    override fun onFling(p0: MotionEvent, p1: MotionEvent, p2: Float, p3: Float): Boolean = false

    override fun onScroll(
        event: MotionEvent,
        event1: MotionEvent,
        distanceX: Float,
        distanceY: Float
    ): Boolean {
        // My Logic
    }
}

正如 Vlad 所说“删除?可能会导致应用程序崩溃。因为 Motion 事件仍然可以为空”

这是谷歌的一个已知问题,它列在问题跟踪器上https://issuetracker.google.com/issues/206855618

即使 e1 被定义为不可为 null,Android API 仍然会为它生成一个 null 值。

将 compileSDK 版本升级到 33 后,无法成功构建项目('onFling' 不覆盖任何内容)

解决此问题的一种方法是添加@Suppress("NOTHING_TO_OVERRIDE", "ACCIDENTAL_OVERRIDE")并将 e1 设置为可为空

override fun onFling(
            e1: MotionEvent?,
... )

如前所述,这是一个已知问题,应该在将来修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM