Menampilkan Progress Dialog Sederhana

Salah satu fitur UI yang umum ada dalam perangkat Android adalah dialog yang menampilkan "Silahkan menunggu", yang biasanya kita lihat bila suatu app melakukan pekerjaan yang agak lama. Misalnya, app tersebut sedang login ke suatu server sebelum user diijinkan untuk menggunakannya, atau app mungkin sedang melakukan komputasi sebelum menampilkan hasilnya ke user. Dalam hal seperti ini, akan sangat bermanfaat untuk menggunakan progress dialog untuk memberi informasi pada user. Berikut adalah latihan untuk menampilkan progress dialog.

1. Kita masih menggunakan project yang sama dalam latihan sebelumnya. Bisa dicoba untuk mengacu ke sebelumnya latihan dialog window - (1) maupun latihan dialog window - (2). Latihan ini akan menggunakan project yang sama dengan latihan dialog window - (2), karena pada latihan dialog window - (1) method yang digunakan sudah deprecated.

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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.fragmentdialog.MainActivity">

<Button
android:id="@+id/btn_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click to display a dialog"
android:onClick="onClick"/>

<Button
android:id="@+id/btn_dialog2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click untuk menampilkan progress dialog"
android:onClick="onClick2"/>

</LinearLayout>

3. Kita modifikasi file utama "MainActivity.java" seperti berikut:
package com.example.fragmentdialog;

import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

FragmentManager fm = getFragmentManager();
MyDF dialogFragment = new MyDF();

ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}


public void onClick(View v) {
dialogFragment.show(fm, "Dialog");
}

public void onClick2(View v) {
/*menampilkan dialog*/
final ProgressDialog dialog = ProgressDialog.show(
this, "Sedang melakukan sesuatu", "Silahkan tunggu...", true);
new Thread(new Runnable() {
@Override
public void run() {
try {
/*mensimulasikan sesuatu proses yg lama*/
Thread.sleep(5000);
/*hentikan dialog*/
dialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}

}
4. Jalankan di emulator Android Studio. Hasilnya kurang lebih adalah seperti gambar berikut:
Progress Dialog
Penjelasan:

Pada dasarnya untuk membuat progress dialog, kita membuat instans dari class 'ProgressDialog' dan memanggil method 'show()' dari class tersebut:
final ProgressDialog dialog = ProgressDialog.show(
this, "Sedang melakukan sesuatu", "Silahkan tunggu...", true);
Ini akan menampilkan progress dialog yang baru saja kita lihat. Karena ini adalah modal dialog, dia akan mem-block UI hingga berhenti. Untuk melakukan pekerjaan yang agak lama di background, kita membuat 'Thread' dengan menggunakan blok kode 'Runnable' yang kita pelajari dalam latihan yang lain [Baca juga: Memahami Threading]. Kode yang kita letakkan di dalam method 'run()' akan dieksekusi melalui thread yang lain, dan dalam hal ini kita hanya mensimulasikannya dengan melakukan sesuatu selama lima detik dengan memasukkan delay menggunakan method 'sleep()':
new Thread(new Runnable() {
@Override
public void run() {
try {
/*mensimulasikan sesuatu proses yg lama*/
Thread.sleep(5000);
/*hentikan dialog*/
dialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Setelah lima detik kita menghentikan dialog dengan memanggil method 'dismiss()'.

No comments: