如何通過僅單擊一次按鈕來實作在 TextView 欄位中以所需延遲一一顯示多條訊息?
我試過這個(看下面的代碼),得到了這樣的結果:三秒鐘過去了,最后只顯示“3”。未顯示數字 1 和 2。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button.setOnClickListener {test()}
}
fun test() {
for (i in (1..3)){
binding.text1.text = "${i}"
Thread.sleep(1000L)
}
}
}
uj5u.com熱心網友回復:
你真的不應該睡覺 Main Thread。主執行緒用于通過休眠來顯示 UI,您阻塞了整個 UI,這就是它不更新的原因。您可以使用Timer每秒運行代碼
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//your method
}
}, 0, 1000);//1 second
因此,例如,您可以在單擊按鈕時啟動計時器并在 3 秒后停止它
uj5u.com熱心網友回復:
感謝您提供有關計時器的提示。
這個執行緒進一步幫助了我。 如何在 Kotlin 中創建一個簡單的倒數計時器?
現在我的代碼看起來像這樣,它可以作業并且做我想要的:
fun test() {
var cnt = 3
val timer = object: CountDownTimer(3000, 1000) {
override fun onTick(millisUntilFinished: Long) {
binding.text1.text = cnt.toString()
cnt--
}
override fun onFinish() {
binding.text1.text = "That's it"
}
}
timer.start()
}
uj5u.com熱心網友回復:
對于這樣簡單的任務,睡眠主執行緒不是解決方案,您應該使用并發,如下面的代碼使用 coouties
suspend fun test(){
for(i in (1..3) {
delay(1000L)
binding.text1.text = i.toStrong()
}
}
并且invokeOnCompletion {}
是處理完成的很好的回呼
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506268.html