전화는 코 틀린의 개인 클래스 내부에 onBackPressed

심각한 :

나는 안드로이드 개발자의 가이드에 따라 제스처 검출기 클래스를 만들려고 해요 웹 사이트를 하지만이 방법은 나에 의해 생성 된 새로운 개인 클래스 내부 () onBackPressed 할 수있는 invoke 때문에 붙어 있어요. 어떻게 그것을 관리 할 수 있습니까? 이건 내 코드입니다 :

    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
        }
    }
}

새로운 코드 :

    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
        }
    }
}

편집 : 나는 새로운 방법이 추가 onBackPressed 나는 내부 클래스를 통해 호출하지만, 아무것도 변경되지 않습니다. 나는 또한 내 로그 캣에서 인쇄가 표시되지 않습니다.

RobCo :

그것을합니다 private inner class.
코 틀린에 중첩 된 클래스는 기본적으로 정적이다. 그것을 둘러싸는 클래스의 속성에 액세스 할 수있는 내부 클래스를 만들려면, 당신은 '내부'키워드를 사용해야합니다.

참조 자바 내부 클래스와 정적 중첩 클래스

추천

출처http://43.154.161.224:23101/article/api/json?id=342951&siteId=1