在计时器我用怎样当按下按钮添加一个时间? 例如,我想,当我按下一个按钮millisUntilFinished由5秒增加。 我试着用全局变量,但事实并非如此。
object :CountDownTimer(10000,1000){
override fun onFinish() {
timeText.text = "Left : 0"
handler.removeCallbacks(runnable)
for (image in imageArray){
image.visibility = View.INVISIBLE
}
for (add in timeAdd){
add.visibility = View.INVISIBLE
}
button.visibility = View.VISIBLE
}
override fun onTick(millisUntilFinished: Long) {
timeText.text = "Left : "+millisUntilFinished/1000
}
}.start()
下面是我们使用倒计时器
fun message(msg:String){
object : CountDownTimer(4000, 1000) {
override fun onTick(millisUntilFinished: Long) {
tvMsg.visibility = View.VISIBLE
tvMsg.text = msg
}
override fun onFinish() {
tvMsg.visibility = View.INVISIBLE
tvMsg.text = ""
}
}.start()
}
而我们使用一个普通的计时器
if (result) {
etItemData.setText("")
message("Record Removed")
Timer().schedule(1000){
thisACTIVITY()
}
科特林抱怨这个不知道为什么
作为@TheWanderer回答您不能更新millisUntilFinished
,因为在没有可用这样的方法CountDownTimer类。
要更新定时器,你必须停止当前的计时器,并开始与更新millisInFuture值新的计时器。 下面是示例代码,这将帮助你实现你想要的。
var timer: Timer?=null
//Call this method to start timer on activity start
private fun startTimer(){
timer = Timer(10000);
timer?.start()
}
//Call this method to update the timer
private fun updateTimer(){
if(timer!=null) {
val miliis = timer?.millisUntilFinished + TimeUnit.SECONDS.toMillis(5)
//Here you need to maintain single instance for previous
timer?.cancel()
timer = Timer(miliis);
timer?.start()
}else{
startTimer()
}
}
inner class Timer(miliis:Long) : CountDownTimer(miliis,1000){
var millisUntilFinished:Long = 0
override fun onFinish() {
timeText.text = "Left : 0"
handler.removeCallbacks(runnable)
for (image in imageArray){
image.visibility = View.INVISIBLE
}
for (add in timeAdd){
add.visibility = View.INVISIBLE
}
button.visibility = View.VISIBLE
}
override fun onTick(millisUntilFinished: Long) {
this.millisUntilFinished = millisUntilFinished
timeText.text = "Left : "+millisUntilFinished/1000
}
}
你不能改变一个已经创建CountDownTimer的剩余时间。
望着源 ,既millisInFuture
和countDownInterval
分配给最终变量; 你不能改变它们。
现在, mStopTimeInFuture
变量,定时器实际使用停止的人,是不是最终的,并且是可以改变的。 但它是一个私有变量,这意味着你需要使用反射,它可能无法正常工作。
如果你想有一个可变CountDownTimer,你需要推出自己的(最简单的方法很可能会复制CountDownTimer源,使mStopTimeInFuture
可变公众并在需要时添加毫秒的话)。