无法更改事件中的变量

Can't change variable in Event

尝试检测滑动手势并使用 android 文档中的代码,稍作更改。 我尝试用 Y 轴数据显示吐司。我在 MyGestureListener class 的开头声明了变量,并在调用 onFling 方法时尝试更改它。我想用 Y 轴数据显示吐司,但总是看到默认字符串 "Def_Nothing"。如果我添加 Log.d — 我观察到,onFling 方法起作用了,我得到了 X 轴和 Y 轴的正确数据。 我认为不了解面向对象编程的一些基础知识,并且对它的解释很少。

class MainActivity : AppCompatActivity() {
    private lateinit var mDetector: GestureDetectorCompat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mDetector = GestureDetectorCompat(this, MyGestureListener())
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        this.mDetector.onTouchEvent(event)
        val myGestureListener = MyGestureListener()
        Toast.makeText(this, myGestureListener.currentGesture, Toast.LENGTH_LONG).show()
        return super.onTouchEvent(event)
    }

    class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
        var currentGesture: String = "Def_Nothing"

        override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {

            currentGesture = (e2!!.y - e1!!.y).toString()
            return true
        }
    }
}

您必须保留对手势侦听器的引用,不能每次都创建一个新的。请参阅下面的示例代码。

class MainActivity : AppCompatActivity() {
    private lateinit var mDetector: GestureDetectorCompat
    private lateinit var mGestureListener: MyGestureListener

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mGestureListener = MyGestureListener()
        mDetector = GestureDetectorCompat(this, mGestureListener)
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        this.mDetector.onTouchEvent(event)
        Toast.makeText(this, mGestureListener.currentGesture, Toast.LENGTH_LONG).show()
        return super.onTouchEvent(event)
    }

    class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
      ...
    }
}