Kotlin 解释中的 CountDownTimer

CountDownTimer in Kotlin explanation

我对 Kotlin 和 Java 都非常陌生。 我在网上搜索并找到了有关在 Kotlin 中使用 CountDownTimer 的教程,但我仍然不明白。我正在尝试创建一个 android 应用程序,其中包含一个页面,无论何时打开它,它都会倒计时 60 秒到 0。

以下是我所做的,试图创建一个字谜游戏。 问题是 textTimer.text 上有错误(未解决的参考),但我看不出我哪里错了。我的计时器正确吗?有没有更好更简单的方法呢?

我遵循这个教程。 https://android--code.blogspot.com/2018/04/android-kotlin-countdowntimer-days.html

package com.example.sim.charades
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.CountDownTimer
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
import java.util.concurrent.TimeUnit

class QuickStart : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_quick_start)

        val textView = findViewById<TextView>(R.id.textView)
        val textTimer = findViewById<TextView>(R.id.textTimer)
        val arrayTerms = arrayListOf("Burger", "Pie", "Fries", "Donuts", "Chocolates", "Sweets")

        val rand = Random().nextInt(arrayTerms.count())
        textView.text = arrayTerms[rand]

        // 60 seconds (1 minute)
        val minute:Long = 60000

        // 1 day 2 hours 35 minutes 50 seconds
        val millisInFuture:Long = (minute * 1440) + (minute * 155) + (1000 * 50)

        // Count down interval 1 second
        val countDownInterval:Long = 1000

        timer(millisInFuture,countDownInterval).start()


    }

    private fun timer(millisInFuture:Long,countDownInterval:Long):CountDownTimer{
        return object: CountDownTimer(millisInFuture,countDownInterval){
            override fun onTick(millisUntilFinished: Long){
                val timeRemaining = timeString(millisUntilFinished)
                textTimer.text = timeRemaining
            }

            override fun onFinish() {
                //nothing Yet
            }
        }
    }

    private fun timeString(millisUntilFinished:Long):String{
        var millisUntilFinished:Long = millisUntilFinished

        val seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)

        // Format the string
        return String.format(
                Locale.getDefault(),
                "%02d sec",
                seconds
        )
    }


}

谢谢大家

您的视图尚未在 onCreate 方法中膨胀。 将您的视图初始化移动到 onViewCreated 方法中,您应该能够解析您的 TextView 引用。

此外,使用 import kotlinx.android.synthetic.main.activity_main.* 您不必使用 findViewById,您可以直接通过其 id 访问您的视图。您可以删除这些行(您的变量似乎与 id 名称匹配)