Android的科特林倒数计时器时间加(Android Kotlin CountDown Timer

2019-10-29 12:48发布

在计时器我用怎样当按下按钮添加一个时间? 例如,我想,当我按下一个按钮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()

Answer 1:

下面是我们使用倒计时器

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()
        }

科特林抱怨这个不知道为什么



Answer 2:

作为@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
        }
    }


Answer 3:

你不能改变一个已经创建CountDownTimer的剩余时间。

望着源 ,既millisInFuturecountDownInterval分配给最终变量; 你不能改变它们。

现在, mStopTimeInFuture变量,定时器实际使用停止的人,是不是最终的,并且是可以改变的。 但它是一个私有变量,这意味着你需要使用反射,它可能无法正常工作。

如果你想有一个可变CountDownTimer,你需要推出自己的(最简单的方法很可能会复制CountDownTimer源,使mStopTimeInFuture可变公众并在需要时添加毫秒的话)。



文章来源: Android Kotlin CountDown Timer for time add