android - 创建一个在每个时间间隔运行的函数,并在 Android Studio 中使用 Kotlin 停止该函数运行

标签 android kotlin android-handler android-looper

我想创建一个每 50 毫秒运行一次的函数(相当于 JS 中的 setInterval)。到目前为止,这就是我所拥有的:

val mainHandler = Handler(Looper.getMainLooper())
mainHandler.post(object: Runnable {
    override fun run() {
        progressBar.progress += 1
        mainHandler.postDelayed(this, 50)
    }
})

它可以工作,但是当进度达到 100 时,如何阻止 run() 函数进一步运行?另外,当我单击按钮(例如 clearInterval)时,有没有办法取消 run 并将 progress 重置为 0 > 在 JS 中)?作为引用,我想要这个:

buttonView.setOnClickListener {
    stopRunFromRunning()
    resetProgressTo0()
}

progress.onReach100 {
    stopRunFromRunning()
}

最佳答案

将可运行对象分配给变量,您可以从处理程序的回调中删除

val progressBar = findViewById(R.id.progress_bar)
val btn = findViewById(R.id.btn)

val handler = Handler(Looper.getMainLooper())
val runnable = Runnable {
    override public fun run() {
     progressBar.progress+=1
       if(progressBar.progress<100)
          handler.postDelayed(this, 50) 
    }
}

handler.post(runnable, milliseconds)

btn.setOnClickListener {
    handler.removeCallbacks(runnable)
    progressBar.progress=0
}

关于android - 创建一个在每个时间间隔运行的函数,并在 Android Studio 中使用 Kotlin 停止该函数运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307064/

相关文章:

java - 我的微调器和 ListView 中出现重复数据

android - 错误 : Failed to find: com. android.support :support-v4:20. 0.+

android - onTouch 和 onClick 没有正确触发

android - 在查询中按顺序排序

inheritance - Kotlin域类转换为子类

android - AlarmManager 与 Handler.postDelayed

android - 取消 handler.postdelayed 进程

java - 如何正确使用Handler

java - 按下按钮时未输入任何内容时 Android 应用程序崩溃

kotlin - 将参数传递给 kotlin 中的自定义 getter