Как обновить Android Textview в постоянном цикле? - PullRequest
1 голос
/ 28 мая 2019

Я использую Kotlin. У меня есть цикл, который будет продолжать идти. Но по какой-то причине я не могу обновить текстовое представление. Вот мой упрощенный пример.

var i = 0
while (!Thread.currentThread().isInterrupted) {
    setString(i.toString())
    i++
    Log.i("Loging value of i === ", i.toString())
}


private fun setString (string : String) {
    tempText.text = string
}

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Произошло то, что из-за того, что вы вызываете обновление пользовательского интерфейса внутри другого Thread, отличного от основного / пользовательского интерфейса Thread, ваш код не может достичь View с в пользовательском интерфейсе Thread.

Назовите код, который обновляет что-то в пользовательском интерфейсе внутри runOnUiThread, например https://stackoverflow.com/a/11140429/10464730 (просто скопируйте часть runOnUiThread).

Или сделайте .post на TextView следующим образом https://stackoverflow.com/a/9884344/10464730. Большую часть времени я сначала использую runOnUiThread. Если не работает, тогда я использую .post.

Извините, код, который я разместил, - Java, но я думаю, вы можете найти его эквивалент на Kotlin.

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

Представления могут быть обновлены только в потоке пользовательского интерфейса. попробуйте что-то вроде этого:

while (!Thread.currentThread().isInterrupted) {

 runOnUiThread(
            object : Runnable {
                override fun run() {
                    //do your view update work here
                      setString(i.toString())
                }
            }
    )
    i++
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...