Как динамически обновить текстовое представление в представлении переработчика с помощью потока обработчика - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь обновить мой TextView потоком Handler из RecyclerView здесь поток успешно выполняется, но мой TextView не обновляется каждую секунду.

Вот мой код:

val timerHandler = Handler()
var sec: Int = 0
var min: Int = 0
var hour: Int = 0
updater = Runnable {
    sec.inc()
    if (sec > 60) {
        sec = 0
        min.inc()
    }
    if (min > 60) {
        min = 0
        hour.inc()
    }

    if(min >= 10 && hour >= 10 && sec >= 10) {
        holder.txthrs.setText(hour.toString() + ":" + min.toString() + ":" + sec.toString())
    } else {
        holder.txthrs.setText("0" + hour.toString() + ":" + "0" + min.toString() + ":" + "0" + sec.toString())
    }
    settime(hour.toString() + ":" + min.toString() + ":" + sec.toString(), position.inc())
    timerHandler.postDelayed(updater, 1000)
}
timerHandler.post(updater) 

Любые предложения будут оценены!

Ответы [ 2 ]

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

Вы вообще не будете запускать таймер на RecyclerView.Holder.

Предположим, у вас есть адаптер с фиксированной возможностью, поддерживающий значение таймера.Затем вам нужно всего лишь обновить это значение в адаптере и уведомить слушателя об изменении.

fun setTime(time: String) {
    this.time = time
    notifyItemChanged(timeItemIndex, time)
}

adapter.setTime(timeString)

Кроме того, вам также потребуется управлять возможностью остановки таймера.

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

Вы не обновляете текстовое представление в потоке пользовательского интерфейса.Добавьте это внутри Runnable {}:

override fun run() {
    holder.txthrs.setText(hour.toString() + ":" + min.toString() + ":" + sec.toString())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...