Я довольно новичок в программировании и хотел немного в него разобраться. В настоящее время я использую Android Studio и Kotlin, чтобы сделать несколько простых вещей с помощью визуального представления и учиться на ходу.
Я начал с генератора случайных чисел, который был в порядке и работал хорошо. В настоящее время я пытаюсь заставить работать простой таймер обратного отсчета, но у меня возникают некоторые проблемы с пониманием самых простых вещей, которые кажутся.
В функции onTick в myTimer val я пытаюсь сохранить оставшееся время внутрипеременная, чтобы я мог возобновить обратный отсчет после приостановки его с другим объектом CountDownTimer. Однако я обнаружил, что переменная timeleft, вызываемая в моей переменной resumeTimer, является не той, которая обновлена в функции onTick myTimer val, а той, которую я объявил в самом начале (0).
Это, очевидно, вызвалообратный отсчет до конца каждый раз, когда я вызывал метод resumeTimer.start.
Затем я создал val resumeTimer в вызове resumeButton.setOnClickListener, который фактически получает желаемое значение timeleft из функции myTimer onTick, но делает так, чтобыЯ не могу вызвать метод resumeTimer. в других частях кода. Это дает мне ошибку "нерешенная ссылка".
Может кто-нибудь сказать мне, почему эти значения не могут быть доступны друг от друга (что я пытаюсь выяснить больше всего), и как вы могли правильно получить желаемый результат?
В настоящее время я включаю код в val resumeTimer в вызове resumeButton.setOnClickListener. Другой вариант состоял в том, что этот код был ниже значения myTimer val за пределами вызова кнопки.
Полегче на меня, и спасибо заранее! :)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var defaultTime:Long = 20000
val Interval:Long = 1000
var timeleft:Long = 0
resumeButton.isEnabled = false
pauseButton.isEnabled = false
val myTimer = object : CountDownTimer(defaultTime, Interval) {
override fun onTick(millisUntilFinished: Long) {
timeleft = millisUntilFinished
showTime.text = (millisUntilFinished / 1000).toString()
}
override fun onFinish() {
showTime.text = "Time's up!"
}
}
resumeButton.setOnClickListener{
val resumeTimer = object : CountDownTimer(timeleft, Interval) {
override fun onTick(millisUntilFinished: Long) {
timeleft = millisUntilFinished
showTime.text = (millisUntilFinished / 1000).toString()
}
override fun onFinish() {
showTime.text = "Time's up!"
}
}
resumeTimer.start()
startButton.isEnabled = false
}
startButton.setOnClickListener{
myTimer.start()
startButton.isEnabled = false
pauseButton.isEnabled = true
}
pauseButton.setOnClickListener{
myTimer.cancel()
resumeTimer.cancel()
resumeButton.isEnabled = true
startButton.isEnabled = true
}
}
}