【问题标题】:How to dynamically update textview inside recycler view with handler thread如何使用处理程序线程动态更新回收器视图中的文本视图
【发布时间】:2019-05-08 10:27:54
【问题描述】:

我正在尝试使用RecyclerView 中的Handler 线程更新我的TextView,这里线程正在成功执行,但我的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) 

任何建议将不胜感激!

【问题讨论】:

    标签: android kotlin android-recyclerview android-handler


    【解决方案1】:

    您没有更新 UI 线程上的文本视图。在Runnable {} 中添加这个:

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

    【讨论】:

    • 我太傻了,只是忘记了那个方法,谢谢它现在正在工作
    【解决方案2】:

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

    假设您有一个具有固定位置的适配器来保存计时器值。然后您只需要在适配器中更新该值并将更改通知侦听器即可。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2014-03-11
      • 2013-11-22
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多