android - 创建一个在每个时间间隔运行的函数并停止该函数在 Android Studio 中与 Kotlin 一起运行
问题描述
我想创建一个每 50 毫秒运行一次的函数(相当于setInterval
在 JS 中)。到目前为止,这就是我所拥有的:
val mainHandler = Handler(Looper.getMainLooper())
mainHandler.post(object: Runnable {
override fun run() {
progressBar.progress += 1
mainHandler.postDelayed(this, 50)
}
})
它可以工作,但是当进度达到时,如何阻止该run()
功能进一步运行100
?另外,当我点击一个按钮(比如在 JS 中)时,有没有办法取消run
并重置?作为参考,我想要这个:progress
0
clearInterval
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
}
推荐阅读
- docker-container - docker 容器错误“无法获得 D-Bus 连接:不允许操作”
- forms - 我想在 GoogleScript 中提交 HTML 服务表单
- node.js - 在 Windows 10 上安装 web3@1.0.0-beta.26 时出错
- javascript - 2 个事件监听器,运行一次函数
- css - Angular - 在标题下拉列表中添加活动样式
- python - 在谷歌 Colab 中使用 cv2.imshow()
- python - 如何从元组的元组列表中获取最大值(?)
- r - 根据时间戳加入两个数据集并组合它们的描述符变量
- javascript - 将 await 添加到 fs.writeFileSync 在 readline 问题中不起作用(节点 10.11.0)
- mysql - SQL 中哪一个更快 ... LIKE s_______ 或 ... LIKE s%