Использование элементов Array с задержкой в ​​kotlin / Android Studio - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь передать каждый элемент в массиве с задержкой между ними в TextView, который я пытался использовать с помощью Runnable & Handler, но он показывает только последний, как я могу передать каждый из них отдельно с задержкой 5-se c. .....

class MainActivity : AppCompatActivity() {

    var array = arrayListOf("bizza","Dolma","Burger","Salut","Drinks","Sussie")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         var ran = Runnable {
            firsttxtview.setText((array[0]).toString())
         }
         var hand = Handler()
         hand.postDelayed(ran, 3000)
}

Ответы [ 3 ]

1 голос
/ 25 апреля 2020

Вы можете попробовать это

val textViewsArray = arrayListOf(firsttxtview,secondtxtview...)

textViewsArray.forEachIndexed { index, textView->

    Handler().postDelayed({
        activity.runOnUiThread {
           textView.setText((array[index]).toString())
        }
    }, 5000 * index)
}
0 голосов
/ 25 апреля 2020

Каждый android.os.Handler имеет свой собственный связанный поток. Нить - это дорогой ресурс. В лучших методах программирования вы никогда не должны создавать новые потоки для очень маленьких операций.

Android уже поставляется с Dispatchers.Main CoroutineDispatcher, который работает в потоке пользовательского интерфейса навсегда.

Вы можете использовать его для Запустите сопрограмму непосредственно в потоке пользовательского интерфейса:

class MainActivity : AppCompatActivity() {

    private var job = Job()
    private var scope = CoroutineScope(Disptachers.Main + job)
    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        if(!job.isActive) {
            job = Job()
            scope += job
        }
        ...
        val viewChangeJob = scope.launch { // can omit creating variable if you don't need
            delay(3_000)
            firsttxtview.setText(array[0])

            // or change text every 3 sec taking every element of array
            // for(item in array) {
            //     delay(3_000)
            //     firsttxtview.setText(item)
            // }
        }

    }

    override fun onDestroy() {
        job.cancel()
    }

Здесь вы также можете полностью контролировать задания, их можно отменить или приостановить и т. д. c. Он также отменяет себя после того, как активность была уничтожена!

0 голосов
/ 25 апреля 2020

Вы можете попробовать использовать CountDownTimer. Подробнее о том, как использовать это , можно узнать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...