Menggunakan ProgressBar

Progressbar memberikan tampilan visual tentang suatu pekerjaan yang sedang berlangsung, misalnya bila kita sedang menjalankan suatu operasi di background. Contohnya adalah ketika men-download suatu data dari web dan perlu meng-update user tentang status download. Dalam hal ini, ProgressBar merupakan pilihan teknik yang baik untuk melakukan hal ini. Berikut adalah contoh latihan penggunaan ProgressBar:

1. Kita buat project baru dan kita beri nama ViewDasar2

2. Kita modifikasi file layout “activity_main.xml” seperti berikut:
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="id.co.blogspot.diansano.viewdasar2.MainActivity">

<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3. Pada file “MainActivity.java” kita modifikasi dan tambahkan kode seperti berikut:
package id.co.blogspot.diansano.viewdasar2;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

static int progress;
ProgressBar progressBar;
int progressStatus = 0;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

progress = 0;
progressBar = (ProgressBar)findViewById(R.id.progressbar);

/*melakukan suatu operasi di thread background*/
new Thread(new Runnable() {
@Override
public void run() {
/*lakukan sesuatu disini*/
while (progressStatus < 10)
{
progressStatus = doSomeWork();
}

/*sembunyikan progress bar*/
handler.post(new Runnable() {
@Override
public void run() {
/*---0 - Visible; 4 - Invisible; 8 - Gone--*/
progressBar.setVisibility(View.GONE);
}
});
}
/*melakukan suatu operasi yang panjang disini*/
private int doSomeWork() {
try {
/*simulasi seolah2 melakukan sesuatu*/
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();
}
}

4. Jalankan di emulator Android Studio. Hasilnya seperti gambar berikut:
Animasi ProgressBar

Penjelasan

Mode default dari ProgressBar adalah tak passti, yaitu animasi yang berputar. Mode ini sangat bermanfaat untuk operasi-operasi yang tidak memiliki waktu selesai yang pasti, misalnya ketika kita mengirim suatu data ke web service dan menunggu server untuk merespon. Bila kita menempatkan elemen <ProgressBar> di dalam file layout “activity_main.xml”, view tersebut akan menampilkan icon berputar yang kontinyu. Jadi kita yang menentukan untuk berhenti bila operasi di background sudah selesai.

Kode yang kita tambahkan di file java menunjukkan bahwa kita bisa memutar suatu thread background untuk membuat simulasi pekerjaan yang panjang. Untuk melakukan ini, kita menggunakan class ‘Thread’ bersama dengan object ‘Runnable’. Method ‘run()’ akan mulai mengeksekusi thread, yang dalam contoh di atas memanggil method ‘doSomeWork()’ untuk mensimulasikan suatu operasi. Ketika operasi yang disimulasikan selesai (setelah sekitar lima detik), kita menggunakan object ‘Handler’ untuk mengirim pesan ke thread untuk menghentikan ‘Progressbar’:
/*melakukan suatu operasi di thread background*/
new Thread(new Runnable() {
@Override
public void run() {
/*lakukan sesuatu disini*/
while (progressStatus < 10)
{
progressStatus = doSomeWork();
}

/*sembunyikan progress bar*/
handler.post(new Runnable() {
@Override
public void run() {
/*---0 - Visible; 4 - Invisible; 8 - Gone--*/
progressBar.setVisibility(View.GONE);
}
});
}
/*melakukan suatu operasi yang panjang disini*/
private int doSomeWork() {
try {
/*simulasi seolah2 melakukan sesuatu*/
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
return ++progress;
}
}).start();
Bila pekerjaan sudah selesai, kita menyembunyikan ‘ProgressBar’ dengan men-set property ‘Visibility’ menjadi ‘View.GONE’ (atau nilai 8). Perbedaan antara konstanta ‘INVISIBLE’ dan ‘GONE’ adalah bahwa konstantan ‘INVISIBLE’ akan menyembunyikan ‘ProgressBar’ (area yang ditempati ‘ProgressBar’ di dalam activity masih terpakai); sedangkan konstanta ‘GONE’ akan menghilangkan ‘ProgressBar’ dari activity sehingga area-nya tidak terpakai.

No comments: