Как создать таймер с обработчиком - PullRequest
0 голосов
/ 18 апреля 2019

Нужно создать секундомер в Android, сейчас у меня есть нечто подобное, простая функция для начала отсчета и отображения времени, но я не знаю, что я делаю неправильно с пост-задержкой:

fun runTimer() {
        val timeView = findViewById<TextView>(R.id.time_view)
        val handler = Handler()
        handler.post(Runnable {
            var hours = seconds / 3600
            var minutes = (seconds % 3600) / 60
            var secs = seconds % 60
            var time = String.format("%d:%02d:%02d", hours, minutes, secs)
            timeView.setText(time)
            if (running) {
                seconds++
            }
            handler.postDelayed(this, 1000)
        })
    }

что именно я должен поставить вместо этого? (должен быть работоспособного типа)

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Я считаю, что в вашем случае наиболее подходящим решением было бы использование хронометра - вы можете прочитать больше об этом здесь . Также, если вы хотите посмотреть видеоурок, вы можете проверить это видео . Надеюсь это поможет. Кроме того, если вы хотите иметь функциональность, чтобы иметь возможность установить конкретный период времени и обратный отсчет с использованием CountDownTimer - это хороший вариант - документация

0 голосов
/ 18 апреля 2019

Я использую обработчик в качестве таймера следующим образом:

class TimerClass {

fun startTimer( handler : Handler ,
                   stuffToDo : () -> Unit ,
                   stopTimeInSeconds : Int ,
                   timePassed : Int ,
                   interval : Long){

    handler.postDelayed( {

        stuffToDo.invoke()
        if (timePassed < stopTimeInSeconds){
            startTimer(handler ,
                stuffToDo ,
                stopTimeInSeconds ,
                timePassed + 1 ,
                interval)
        }

    } , interval)

}}

, а затем использую его:

   val time = TestClass()

    time.startTimer(handler = Handler() ,
        stuffToDo = { textView.text = "some new text" } ,
        stopTimeInSeconds = 5 ,
        timePassed = 0 , 
        interval = 1000)

Итак, вы определяете метод в классе и предоставляете все зависимости (объекты)и вводя его, вы создаете операцию, которую хотите сделать, как лямбда-функцию.затем вызовите метод отложенного обработчика, и в обработчике, если критерий (оператор if) верен, вы будете вызывать сам метод рекурсивно с приращением (timePassed + 1).Теперь у вас есть рабочий таймер.

...