Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t在事件中更改变量_Android_Oop_Kotlin_Gesturedetector - Fatal编程技术网

Android Can';t在事件中更改变量

Android Can';t在事件中更改变量,android,oop,kotlin,gesturedetector,Android,Oop,Kotlin,Gesturedetector,尝试检测刷卡手势,并使用android文档中的代码进行liitle更改。 我尝试用Y轴数据显示toast。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d-I watch,这个onFling方法就可以工作了,我可以得到正确的X轴和Y轴数据。 我认为我不了解面向对象编程的一些基本原理,也不需要对其进行任何解释 class MainActivity :

尝试检测刷卡手势,并使用android文档中的代码进行liitle更改。 我尝试用Y轴数据显示toast。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d-I watch,这个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() {
      ...
    }
}

谢谢,很好用。我不能提高回答率。PS将去学习OOP理论。很高兴能帮助你。如果对你有帮助的话,你应该这样做。