Периодически запускать метод, используя расширения обработчика ktx - PullRequest
0 голосов
/ 23 мая 2019

Я недавно начал использовать расширения android-ktx Kotlin.И я столкнулся с расширениями обработчика, которые очень аккуратно преобразуют

handler.postDelayed(runnable, delayInMillis)

в

handler.postDelayed(delayInMillis = 200L) {
    // some action
}

Проблема, с которой я столкнулся, заключается в том, как преобразовать следующий код, чтобы использоватьKTX расширения.Это вообще возможно?

handler.postDelayed(object : Runnable {
    override fun run() {
        doSomething()
        handler.postDelayed(this, 1000)
    }
}, 1000)

1 Ответ

0 голосов
/ 23 мая 2019

Вы не можете вызвать лямбду изнутри. Одна хитрость заключается в использовании ссылки на функцию:

private val handler = Handler()

override fun onCreate(savedInstanceState: Bundle?) {
    // ..
   handler.postDelayed(delayInMillis = 200L, action = ::run)
}

private fun run() {
    doSomething()
    handler.postDelayed(delayInMillis = 200L, action = ::run)
}

...