Как сделать универсальный метод onTouchEvent для kotlin? - PullRequest
0 голосов
/ 01 января 2019

У меня есть такой метод.В логинактивности.кт.Я хочу сделать этот метод универсальным и использовать его везде.Я хочу написать метод в CommonExtensions.kt, но я не могу написать его правильно, и я получаю ошибку.Как сделать так, чтобы Generic стал

LoginActivity.kt

override fun onTouchEvent(event: MotionEvent?): Boolean {

    val imm = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.currentFocus?.windowToken, 0)

    return super.onTouchEvent(event)
}

CommonExtensions.kt

fun Context.onTouchEvent(event: MotionEvent?): Boolean {

val imm = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.onTouchEvent()?.windowToken, 0)
}

1 Ответ

0 голосов
/ 01 января 2019

У вас есть несколько вариантов:

  • Создайте базовый класс для действий, например, BaseActivity и переопределите метод onTouchEvent.Унаследуйте от этого действия другие действия.
  • Создайте какой-нибудь файл утилит, например UiUtils.kt, и определите метод сокрытия клавиатуры там, например:

    fun hideKeyboard(view: View) {
        val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(view.windowToken, 0)
    }
    

    Вызовите его из ваших действий'onTouchEvent() метод:

    override fun onTouchEvent(event: MotionEvent?): Boolean {        
        hideKeyboard(someView)
        return super.onTouchEvent(event)
    }
    
  • Создайте функцию расширения на View в вашем CommonExtensions.kt файле:

    fun View.hideKeyboard() {
        val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(windowToken, 0)
    }
    

    и вызовите ее с onTouchEvent() метод:

    override fun onTouchEvent(event: MotionEvent?): Boolean {        
        someView.hideKeyboard()
        return super.onTouchEvent(event)
    }
    
...