Как я могу открыть действие двойным щелчком мыши? (Котлин)

#android #kotlin

Вопрос:

При двойном нажатии на таймер обратного отсчета я хочу, чтобы он открывал полноэкранное действие.

     countDownTimer.setOnClickListener(object : DoubleClickListener() {
        override fun onDoubleClick(v: View?) {
            Toast.makeText(applicationContext,"Full Screen Mode!",Toast.LENGTH_SHORT).show()
            val screenFull = Intent(this, FullScreen::class.java) //The Intent on this line is presenting an error
            startActivity(screenFull)
        }
    })

} //This bracket is from OnCreate

abstract class DoubleClickListener : View.OnClickListener {
    var lastClickTime: Long = 0
    override fun onClick(v: View?) {
        val clickTime = System.currentTimeMillis()
        if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA) {
            onDoubleClick(v)
        }
        lastClickTime = clickTime
    }

    abstract fun onDoubleClick(v: View?)
    companion object {
        private const val DOUBLE_CLICK_TIME_DELTA: Long = 300 //milliseconds
    }
}
 

Приведенный выше код выдает следующую ошибку при компиляции кода.

Ни одна из следующих функций не может быть вызвана с предоставленными аргументами: Намерение открытого конструктора(p0: Контекст!, p1: Класс<*>!), определенное в android.content.Намерение Намерение публичного конструктора(p0: Строка!, p1: Uri!), определенное в файле android.content.Намерение

Как я мог это исправить? Спасибо.

Ответ №1:

Замените эту строку

val screenFull = Намерение(это, FullScreen::class.java)

С:

val screenFull = Намерение(это@YourActivityName, FullScreen::class.java)

Это устранит вашу проблему.

Ответ №2:

Это говорит о том, что аргументы , которые вы передаете, this и Class , не соответствуют ни одному из конструкторов. Это потому this , что относится к вашему DoubleClickListener объекту, а не к Activity (или к тому, что Context вы хотите передать)

Если вы удалите часть this и начнете ее перепечатывать, это должно предоставить вам параметры автозаполнения для внешних объектов, которые вы можете видеть из этой области. this@MyActivity или что — то еще, вероятно, то, что вы хотите.

Кроме того, на случай, если вы не знали, есть GestureDetector класс, в котором вы можете установить прослушиватель с двойным нажатием. Вот как вы можете добавить пустую реализацию, чтобы вам нужно было только переопределить обратные вызовы, которые вы хотите прослушать: https://developer.android.com/training/gestures/detector#detect-a-subset-of-supported-gestures