Android Indeterminate ProgressBar – Kotlin Example
Android Indeterminate ProgressBar – Kotlin Example : In this Android Tutorial, we shall learn to indicate the progress of a task whose progress cannot be tracked. Here we shall not indicate any specific numbers for the progress, but with an indefinite progressing view. An example task could be page loading, the progress is indefinite, but we have to let the user know that page loading task is happening, and so the ProgressBar used is in Indefinite mode.
Usually indefinite ProgressBar is used in such a way that initially it is hidden. When the task is started by an event or some other means, ProgressBar is shown. And finally when the task is completed, the ProgressBar is again hidden.
Indeterminate is the default mode of a ProgressBar and most importantly do not mention any progress for the view in layout xml file.
In this tutorial, we shall mimic the indeterminate task with a Runnable Thread using a long running while loop.
Following are the details of the Android Application we created for this example.
Application Name | ProgressBarIndEx |
Company name | tutorialkart.com |
Minimum SDK | API 21: Android 5.0 (Lollipop) |
Activity | Empty Activity |
Create an Android Application with Kotlin Support with above details and keeping rest to default. Replace activity_main.xml and MainActivity.kt with the following content.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context="com.tutorialkart.progressbarindex.MainActivity"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Do some stuff" /> <ProgressBar android:id="@+id/progressBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:visibility="gone"/> </LinearLayout>
MainActivity.kt
package com.tutorialkart.progressbarindex import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.view.View import android.widget.ProgressBar import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // get the references from layout file val btnStartProgress = this.button1 val progressBar: ProgressBar = this.progressBar1 // when button is clicked, start the task btnStartProgress.setOnClickListener { v -> // task is run on a thread Thread(Runnable { // dummy thread mimicking some operation whose progress cannot be tracked // display the indefinite progressbar this@MainActivity.runOnUiThread(java.lang.Runnable { progressBar.visibility = View.VISIBLE }) // performing some dummy time taking operation try { var i=0; while(i<Int.MAX_VALUE){ i++ } } catch (e: InterruptedException) { e.printStackTrace() } // when the task is completed, make progressBar gone this@MainActivity.runOnUiThread(java.lang.Runnable { progressBar.visibility = View.GONE }) }).start() } } }