深刻:
私は、Androidデベロッパーのガイドに従って、ジェスチャー検出器クラスを作成しようとしているウェブサイトを、私はメソッドInvoke私が作成した新しいプライベートクラス内()をonBackPressedすることはできませんので、私はこだわっています。どのように私はそれを管理することができますか?これは私のコードです:
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と私は内部クラスを通してそれを呼び出したが、何も変わっていません。私も自分のLogcatでプリントを見ていません。
RobCo:
それてくださいprivate inner class
。
Kotlinでは、ネストされたクラスは、デフォルトでは静的です。それを囲むクラスのプロパティにアクセスすることができ、内部クラスを作成するには、「内部の」キーワードを使用する必要があります。
参照してくださいJavaの内部クラスと静的な入れ子になったクラスを