如何使用处理程序创建计时器
How to create timer with handler
需要在 android 中创建秒表,现在我有这样的想法,开始计数和显示时间的简单功能,但我不知道我在延迟后做错了什么:
fun runTimer() {
val timeView = findViewById<TextView>(R.id.time_view)
val handler = Handler()
handler.post(Runnable {
var hours = seconds / 3600
var minutes = (seconds % 3600) / 60
var secs = seconds % 60
var time = String.format("%d:%02d:%02d", hours, minutes, secs)
timeView.setText(time)
if (running) {
seconds++
}
handler.postDelayed(this, 1000)
})
}
我应该用什么代替这个? (需要是可运行类型)
我相信在您的用例中,最合适的解决方案是使用 Chronometer - 您可以阅读更多相关信息 here. Also if you want to watch a video tutorial you can check this video. Hope this helps. Additionally if you want to have the functionality to be able to set a specific time frame and countdown using a CountDownTimer is a good option - documentation
我像这样使用处理程序作为计时器 :
class TimerClass {
fun startTimer( handler : Handler ,
stuffToDo : () -> Unit ,
stopTimeInSeconds : Int ,
timePassed : Int ,
interval : Long){
handler.postDelayed( {
stuffToDo.invoke()
if (timePassed < stopTimeInSeconds){
startTimer(handler ,
stuffToDo ,
stopTimeInSeconds ,
timePassed + 1 ,
interval)
}
} , interval)
}}
然后使用它:
val time = TestClass()
time.startTimer(handler = Handler() ,
stuffToDo = { textView.text = "some new text" } ,
stopTimeInSeconds = 5 ,
timePassed = 0 ,
interval = 1000)
所以你在 class 中定义了一个方法,并提供所有依赖项(对象)并注入它,你正在创建你想要作为 lambda 函数执行的操作。然后调用处理程序延迟方法,如果条件(if 语句)为真,则在处理程序中调用方法本身,并递归递增(timePassed+1)。
现在你有一个工作计时器。
需要在 android 中创建秒表,现在我有这样的想法,开始计数和显示时间的简单功能,但我不知道我在延迟后做错了什么:
fun runTimer() {
val timeView = findViewById<TextView>(R.id.time_view)
val handler = Handler()
handler.post(Runnable {
var hours = seconds / 3600
var minutes = (seconds % 3600) / 60
var secs = seconds % 60
var time = String.format("%d:%02d:%02d", hours, minutes, secs)
timeView.setText(time)
if (running) {
seconds++
}
handler.postDelayed(this, 1000)
})
}
我应该用什么代替这个? (需要是可运行类型)
我相信在您的用例中,最合适的解决方案是使用 Chronometer - 您可以阅读更多相关信息 here. Also if you want to watch a video tutorial you can check this video. Hope this helps. Additionally if you want to have the functionality to be able to set a specific time frame and countdown using a CountDownTimer is a good option - documentation
我像这样使用处理程序作为计时器 :
class TimerClass {
fun startTimer( handler : Handler ,
stuffToDo : () -> Unit ,
stopTimeInSeconds : Int ,
timePassed : Int ,
interval : Long){
handler.postDelayed( {
stuffToDo.invoke()
if (timePassed < stopTimeInSeconds){
startTimer(handler ,
stuffToDo ,
stopTimeInSeconds ,
timePassed + 1 ,
interval)
}
} , interval)
}}
然后使用它:
val time = TestClass()
time.startTimer(handler = Handler() ,
stuffToDo = { textView.text = "some new text" } ,
stopTimeInSeconds = 5 ,
timePassed = 0 ,
interval = 1000)
所以你在 class 中定义了一个方法,并提供所有依赖项(对象)并注入它,你正在创建你想要作为 lambda 函数执行的操作。然后调用处理程序延迟方法,如果条件(if 语句)为真,则在处理程序中调用方法本身,并递归递增(timePassed+1)。 现在你有一个工作计时器。