Как правильно отображать изменяемые данные в реальном времени?
Я хотел бы отображать писать результат инкремента каждую секунду на экране. Вот моя попытка с ошибкой:
val view = findViewById<TextView>(R.id.text_view)
view.setTextColor(0xFFFF0000.toInt())
view.setOnClickListener {
}
val counter = AtomicInteger()
val btn = findViewById<Button>(R.id.start_button)
btn.setOnClickListener {
thread {
(0..100).forEach { _ ->
Thread.sleep(1_000)
view.text = counter.getAndIncrement().toString()
}
}
}
Как это сделать правильно?
Ответы (1 шт):
Автор решения: Vlad Orlinskas
→ Ссылка
Вы пытаетесь выполнить изменения интерфейса за пределами ui потока. Думаю вам (как и мне) не хватает понимания многопоточности в android. Я бы в вашем случаи изучил двунаправленный DataBinding и kotlin coroutines. В любом случаи вашу проблему должен решить
runOnUiThread { object :Runnable{
override fun run() {
view.text = counter.getAndIncrement().toString()
}
}
Это можно вызвать внутри вашего thread {}. Так же студия должна предложить вам использовать лямбда выражение.