如何在进行中的循环中更新Android Textview?

时间:2019-05-28 00:46:29

标签: java android kotlin

我正在使用Kotlin。我有一个循环将继续下去。但是由于某种原因,我无法更新文本视图。这是我的简化示例。

$ rails c production
Running via Spring preloader in process 3131
Loading production environment (Rails 5.2.2)
2.6.3 :001 > User.first
Traceback (most recent call last):
        1: from (irb):1
NoMethodError (undefined method `encode' for nil:NilClass)

3 个答案:

答案 0 :(得分:2)

发生的原因是因为您在不同于主/ UI Thread的另一个Thread内调用UI更新,所以您的代码无法到达UI {上的View s { {1}}。

Thread内部调用更新https://stackoverflow.com/a/11140429/10464730之类的UI上的代码的代码(只需复制runOnUiThread部分)。

或者像这样https://stackoverflow.com/a/9884344/10464730runOnUiThread上进行.post。在大多数情况下,我会先使用TextView。如果不起作用,那就是我使用runOnUiThread的时候。

对不起,我发布的代码是.post,但我认为您可以在Java上查找与之等效的代码。

答案 1 :(得分:0)

只能在UI线程中更新视图。尝试这样的事情:

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

 runOnUiThread(
            object : Runnable {
                override fun run() {
                    //do your view update work here
                      setString(i.toString())
                }
            }
    )
    i++
}

答案 2 :(得分:0)

我也喜欢这种协程方法来更新文本视图,请将其放在onCreate中,还包括协程的gradle实现:

    GlobalScope.launch(Dispatchers.Main) {
        var i = 0
        while (i < 100) {
            textViewId.setText("#$i")
            i++
            delay(300)
        }
    }