Значение доступа вне объекта - PullRequest
0 голосов
/ 27 октября 2019

Я довольно новичок в программировании и хотел немного в него разобраться. В настоящее время я использую 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...