kotlin GestureDetector.OnGestureListener重写的方法在Android API 33中无法正常工作

tvokkenx  于 2022-12-23  发布在  Kotlin
关注(0)|答案(2)|浏览(364)

我已经在我的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
    }
}
xeufq47z

xeufq47z1#

好吧,我自己发现上面的代码在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
    }
}
fhity93d

fhity93d2#

正如Vlad所说,“删除?可能会导致应用程序崩溃,因为运动事件仍然可以为空”
这是Google的已知问题,已在问题跟踪器https://issuetracker.google.com/issues/206855618中列出
即使e1定义为不可空,Android API仍会为其生成空值。
将compileSDK版本升级到33后,无法成功构建项目(“onFling”不覆盖任何内容)
解决此问题的一种方法是添加@Suppress("NOTHING_TO_OVERRIDE", "ACCIDENTAL_OVERRIDE")并将e1设置为nullable

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

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

相关问题