[FIXED] How to add a delay in For loop in kotlin android

Issue

I want to animate the progress bar so i am setting its progress using for loop but the loop is too much faster that i can’t see the animation . I want the code to add a delay in the loop , i tried using thread delay but not working –
here is the code

      private fun showProgress() {

    
        for(i in 0..100){
            
            Thread{
            binding.customProgressBar.progress=i
            Thread.sleep(100)

        }

    }
  }

Solution : Was not calling start method , but if there any other approach then please let me know

 private fun showProgress() {

    Thread {
        for (i in 0..100) {

            binding.customProgressBar.progress = i
            Thread.sleep(100)
        }

    }.start()


}

now i want to terminate the thread when fragment is on pause state .
how to achieve that ?

Solution

since you are using kotlin it is better to use coroutine, you can achieve your goal with something like this:

private suspend fun someProgress(scope: CoroutineScope) {
    val job = scope.launch {
        for (i in 0..100) {
            binding.customProgress.progress = i
            delay(100)
        }
    }

    // use job.cancel() for cancelling the job or use job.join() for waiting for the job to finish
}

you can learn more about coroutine and how it works in here.

Answered By – Amin Mousavi

Answer Checked By – Clifford M. (Easybugfix Volunteer)

Leave a Reply

(*) Required, Your email will not be published