首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android kotlin每秒钟更新一次TextView

Android kotlin每秒钟更新一次TextView
EN

Stack Overflow用户
提问于 2022-08-01 20:21:24
回答 2查看 124关注 0票数 0

我希望文本视图每秒钟或更短时间以动态随机方式更新,在循环结束时,text视图显示最后一个随机数。我试图添加一个睡眠方法,但它并不是每次我点击按钮时,文本视图都会直接显示最后一个随机数。

代码语言:javascript
运行
复制
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.button1)
        var result: TextView = findViewById(R.id.textView)

        rollButton.setOnClickListener {
            for (i in 1..10){
                result.text = "${(1..6).random()}"
            }
            Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-02 05:23:57

Coroutine延迟是这样做的一种方式,ltp的回答中提出了这一点,另一种方法是Runnable和Handler,这是一个示例函数:

代码语言:javascript
运行
复制
    fun animateTextView(handler: Handler, textView: TextView, animate: Boolean = true) {
        val runnable: Runnable = object : Runnable {
            var randomNumber = 0
            override fun run() {
                randomNumber = (1..100).random()
                textView.text = "$randomNumber"
                handler.postDelayed(this, 500L)
            }
        }

        // animate == false -> end text updates
        if (animate) handler.postDelayed(runnable, 500L)
        else handler.removeCallbacks(runnable)
    }

函数的示例使用:

代码语言:javascript
运行
复制
    private val textAnimaterHandler = Handler(Looper.getMainLooper())
    animateTextView(textAnimaterHandler, binding.textView)
    // Stop updates:
    animateTextView(textAnimaterHandler, binding.textView, animate = false)
票数 0
EN

Stack Overflow用户

发布于 2022-08-01 20:39:36

您可以使用Coroutine延迟。

代码语言:javascript
运行
复制
  rollButton.setOnClickListener {
        CoroutineScope(Dispatchers.Main).launch {
                   //Disable button temporarily to prevent multiple clicks
                    it.isEnabled = false
                    for (i in 1..10) {
                        binding.textviewFirst.text = "${(1..6).random()}"
                        //One second delay before the next
                        delay(1000)

                       //If you want random delay - say 100ms to 1s
                       //delay((100L..1000L).random())
                    }
                    it.isEnabled = true
                    Toast.makeText(this@MainActivity, "Dice Rolled!", Toast.LENGTH_SHORT).show()
                }
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73199198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档