CountDownTimer в объяснении Котлина

Я очень новичок в 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
        )
    }


}

Спасибо, парни

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 624
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше мнение еще не завышено в методе onCreate. Переместите инициализацию представления в метод onViewCreated, и вы сможете разрешить ссылку на TextView.

Кроме того, при использовании import kotlinx.android.synthetic.main.activity_main.* вам не нужно использовать findViewById, вы можете напрямую получить доступ к своему просмотру с его id. Вы можете удалить эти строки (ваши переменные, похоже, соответствуют имени идентификатора)

Ах, спасибо за советы, чувак. Я просто опускаюсь вниз val textTimer = findViewById <TextView> (R.id.textTimer), и он работает. Но как получить к нему доступ с помощью только идентификатора?

Ivan Simm 26.07.2018 16:27

Вам не нужно сохранять аффектации. Просто удалите val textTimer = findViewById.... и напрямую вызовите textTimer.text = arrayTerms [rand]. Пока вам нужно импортировать kotlinx с правильным путем макета, у вас все в порядке. См .: kotlinlang.org/docs/tutorials/android-plugin.html

MajorShepard 26.07.2018 16:35

Смело примите ответ, если ваша проблема решена;)

MajorShepard 26.07.2018 23:01

Другие вопросы по теме