Kotlin, Android - Как разместить один и тот же исполняемый файл внутри исполняемого?

Я хочу опубликовать runnable для объекта просмотра внутри runnable, в настоящее время я застрял здесь.

 var runnable = Runnable {
        if (numLinesToDraw >= amplititudes.size){

        }
        else
        {
            numLinesToDraw = numLinesToDraw ++
            invalidate()
            postDelayed({

            },2000)
        }
    }

    postDelayed(runnable,2000)

Как видите, внутри runnable есть метод postDelayed. Я хочу снова опубликовать тот же запускаемый файл и так далее. Что мне добавить сюда?

       postDelayed({

        },2000)

использовать this? По крайней мере, для Java это работает. postDelayed(this,2000)

Vladyslav Matviienko 29.05.2018 13:04

Если это периодический обратный вызов, я бы также добавил removeCallbacks(this) в начале runnable, на всякий случай, он никогда не «удваивается» и не запускается слишком часто.

Pawel 29.05.2018 13:15
4
2
4 791
2

Ответы 2

В Kotlin 1.2+ вы можете определить локальный lateinit var для runnable, а затем инициализировать его с помощью Runnable, который использует переменную:

lateinit var runnable: Runnable
runnable = Runnable {
    /* ... */
    postDelayed(runnable,2000)
}

Сделай так,

var myRunnable: Runnable = object : Runnable {
    override fun run() {
        progressHandler.postDelayed(this, 100) // here is self calling
    }
}

Это решение работает, если использовать лямбда, указатель это не может быть найден.

Glorin 24.12.2018 11:06

Другие вопросы по теме