如何使用处理程序线程动态更新回收者视图内的textview

时间:2019-05-08 10:27:54

标签: android kotlin android-recyclerview android-handler

我正在尝试从TextViewHandler线程更新RecyclerView,这里线程已成功执行,但我的TextView却没有每秒更新。 / p>

这是我的代码:

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 :(得分:0)

您没有在UI线程上更新textview。将此添加到Runnable {}中:

override fun run() {
    holder.txthrs.setText(hour.toString() + ":" + min.toString() + ":" + sec.toString())
}

答案 1 :(得分:0)

您根本不会在RecyclerView.Holder上运行计时器。

假设您有一个带有固定位置的适配器,其中包含计时器值。然后,您只需要在适配器中更新该值,并将更改通知给侦听器即可。

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

adapter.setTime(timeString)

此外,您还必须设法停止计时器。