Memahami Jenis-jenis Fragment Khusus - DialogFragment

Menampilkan DialogFragment

Jenis lain dari fragment yang bisa kita buat adalah fragment dialog. Fragment dialog akan mengambang di atas activity. Fragment dialog akan sangat bermanfaat untuk hal-hal dimana kita perlu mendapatkan respon user sebelum melanjutkan dengan suatu eksekusi. Untuk membuat fragment dialog, kita perlu melakukan ‘extend’ class ‘DialogFragment’.

1. Kita buat project baru dengan nama “ContohDialogFragment”

2. Kita buat java class baru dengan nama “Fragment1.java” seperti berikut:
package id.co.blogspot.diansano.contohdialogfragment;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.app.DialogFragment;

public class Fragment1 extends DialogFragment {

static Fragment1 newInstance(String judul) {
Fragment1 fragment1 = new Fragment1();
Bundle args = new Bundle();
args.putString("judul", judul);
fragment1.setArguments(args);
return fragment1;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("judul");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setTitle(title)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity)getActivity()).doPositiveClick();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity)getActivity()).doNegativeClick();
}
}).create();
}
}
3. Kita modifikasi file “MainActivity.java” seperti berikut:
package id.co.blogspot.diansano.contohdialogfragment;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

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

Fragment1 dialogFragment = Fragment1.newInstance(
"Apakah Anda yakin melakukan ini?");
dialogFragment.show(getFragmentManager(), "dialog");
}

public void doPositiveClick() {
/*lakukan sesuatu disini bila user klik OK*/
Log.d("Contoh Dialog Fragment", "User klik OK");
}

public void doNegativeClick() {
/*lakukan sesuatu bila user klik Cancel*/
Log.d("Contoh Dialog Fragment", "User klik Cancel");
}
}
4. Jalankan di emulator Android Studio seperti berikut:

Penjelasan

Untuk membuat fragment dialog, pertama kita harus membuat class java yang melakukan ‘extends’ class ‘DialogFragment’ seperti berikut:
public class Fragment1 extends DialogFragment {
}
Dalam contoh latihan ini, kita membuat alert dialog, yang menampilkan suatu pesan dan tombol pilihan. Di dalam class ‘Fragment1’, kita membuat method ‘newInstance()’ seperti berikut:
static Fragment1 newInstance(String judul) {
Fragment1 fragment1 = new Fragment1();
Bundle args = new Bundle();
args.putString("judul", judul);
fragment1.setArguments(args);
return fragment1;
}
Method ‘newInstance()’ memungkinkan kita untuk membuat instans dari fragment tersebut dan pada saat yang bersamaan menerima argument yang menetapkan string (judul) untuk ditampilkan pada alert dialog. ‘Judul’ tersebut kemudian disimpan di dalam object ‘Bundle’ untuk digunakan nanti.

Kemudian, kita membuat method ‘onCreateDialog()’ yang dipanggil setelah ‘onCreate()’ dan sebelum ‘onCreateView()’ (lihat siklus hidup fragment) seperti berikut:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("judul");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setTitle(title)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity)getActivity()).doPositiveClick();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity)getActivity()).doNegativeClick();
}
}).create();
}
Kode tersebut kita sudah membuat alert dialog yang berisi dua tombol: OK dan Cancel. String yang ditampilkan diambil dari argumen ‘judul’ yang disimpan di dalam object ‘Bundle’.

Untuk menampilkan fragment dialog, kita sudah membuat instans-nya dan kemudian memanggil method ‘show()’ seperti berikut:
Fragment1 dialogFragment = Fragment1.newInstance(
"Apakah Anda yakin melakukan ini?");
dialogFragment.show(getFragmentManager(), "dialog");
Kita juga perlu mengimplementasikan dua method, ‘doPositiveClick()’ dan ‘doNegativeClick()’, untuk merespon klik user apakah tombol OK atau Cancel seperti berikut:
public void doPositiveClick() {
/*lakukan sesuatu disini bila user klik OK*/
Log.d("Contoh Dialog Fragment", "User klik OK");
}

public void doNegativeClick() {
/*lakukan sesuatu bila user klik Cancel*/
Log.d("Contoh Dialog Fragment", "User klik Cancel");
}

No comments: