Call onBackPressed inside a private class in Kotlin

Babbara :

I'm trying to create a gesture detector class by following the guide on the Android Developers website, but I'm stuck because I cannot invoke the method onBackPressed() inside the new private class created by me. How can I manage it? This is my code:

    class DetailActivity : AppCompatActivity() {

    private lateinit var mDetector: GestureDetectorCompat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.detail_activity)

        mDetector = GestureDetectorCompat(this, MyGestureListener())
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        mDetector.onTouchEvent(event)
        return super.onTouchEvent(event)
    }

    private class MyGestureListener : GestureDetector.SimpleOnGestureListener() {

        private val SWIPE_DISTANCE_THRESHOLD = 100
        private val SWIPE_VELOCITY_THRESHOLD = 100

        override fun onDown(event: MotionEvent): Boolean {
            //CALL onBackPressed
            return true
        }

        override fun onFling(
                event1: MotionEvent,
                event2: MotionEvent,
                velocityX: Float,
                velocityY: Float
        ): Boolean {
            //TODO
            var distanceX = event2.getX() - event1.getX()
            var distanceY = event2.getY() - event1.getY()
            if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                if (distanceX > 0)
                //CALL onBackPressed
            }
            return true
        }
    }
}

New code:

    class DetailActivity : AppCompatActivity() {

    private lateinit var mDetector: GestureDetectorCompat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.detail_activity)

        mDetector = GestureDetectorCompat(this, MyGestureListener())
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        mDetector.onTouchEvent(event)
        return super.onTouchEvent(event)
    }

    override fun onBackPressed() {
        super.onBackPressed()
    }

    inner class MyGestureListener : GestureDetector.SimpleOnGestureListener() {

        private val SWIPE_DISTANCE_THRESHOLD = 100
        private val SWIPE_VELOCITY_THRESHOLD = 100

        override fun onDown(event: MotionEvent): Boolean {
            System.out.println("LOGG")
            [email protected]()
            return true
        }

        override fun onFling(
                event1: MotionEvent,
                event2: MotionEvent,
                velocityX: Float,
                velocityY: Float
        ): Boolean {
            var distanceX = event2.getX() - event1.getX()
            var distanceY = event2.getY() - event1.getY()
            if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                if (distanceX > 0) {
                    System.out.println("LOGG")
                    [email protected]()
                }
            }
            return true
        }
    }
}

EDIT: I added a new method onBackPressed and I invoked it through the inner class, but nothing changed. I also doesn't see the prints in my Logcat.

RobCo :

Make it a private inner class.
In Kotlin nested classes are static by default. To make it an inner class, which can access properties of the enclosing class, you have to use the 'inner' keyword.

See Java inner class and static nested class

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=342390&siteId=1
Recommended