Я очень новичок в Kotlin, а также в Java. Я поискал в Интернете и нашел руководства по использованию CountDownTimer в Kotlin, но я все еще не понимаю. Я пытаюсь создать приложение для 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. Вы можете удалить эти строки (ваши переменные, похоже, соответствуют имени идентификатора)
Вам не нужно сохранять аффектации. Просто удалите val textTimer = findViewById.... и напрямую вызовите textTimer.text = arrayTerms [rand]. Пока вам нужно импортировать kotlinx с правильным путем макета, у вас все в порядке. См .: kotlinlang.org/docs/tutorials/android-plugin.html
Смело примите ответ, если ваша проблема решена;)
Ах, спасибо за советы, чувак. Я просто опускаюсь вниз val textTimer = findViewById <TextView> (R.id.textTimer), и он работает. Но как получить к нему доступ с помощью только идентификатора?