我已经在我的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
}
}
2条答案
按热度按时间xeufq47z1#
好吧,我自己发现上面的代码在API级别32上运行得很好,而在API级别33上却出现了问题,原因是
?
操作符与MotionEvent
。我只是删除了它,它在API级别33上也运行得很好。新代码看起来像这样。fhity93d2#
正如Vlad所说,“删除?可能会导致应用程序崩溃,因为运动事件仍然可以为空”
这是Google的已知问题,已在问题跟踪器https://issuetracker.google.com/issues/206855618中列出
即使e1定义为不可空,Android API仍会为其生成空值。
将compileSDK版本升级到33后,无法成功构建项目(“onFling”不覆盖任何内容)
解决此问题的一种方法是添加
@Suppress("NOTHING_TO_OVERRIDE", "ACCIDENTAL_OVERRIDE")
并将e1设置为nullable如前所述,这是一个已知问题,应在未来修复。