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 名称匹配)
我对 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 名称匹配)