Menampilkan DatePicker Menggunakan Dialog

Sama seperti dengan cara “Menampilkan TimePicker Menggunakan Dialog”. Berikut adalah contoh latihan “Menampilkan DatePicker Menggunakan Dialog”.

1. Kita masih menggunakan project yang seperti latihan sebelumnya tentang Menampilkan TimePicker Menggunakan Dialog, untuk kita modifikasi.

2. Praktik yang baik untuk menampilkan DatePicker dengan Dialog adalah dengan membuat class terpisah yang menurunkan classs 'DialogFragment' untuk menampilkan Dialog. Kita akan buat class java ini dan kita beri nama 'DatePickerDF.java' dengan kode seperti berikut:
package id.co.blogspot.diansano.viewdasar4;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;
import android.widget.Toast;

import java.util.Calendar;

public class DatePickerDF extends DialogFragment
implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
/*mengambil waktu default utk picker*/
Calendar cal = Calendar.getInstance();
int tahun = cal.get(Calendar.YEAR);
int bulan = cal.get(Calendar.MONTH);
int tanggal = cal.get(Calendar.DAY_OF_MONTH);

/*buat instans object DatePickerDialog dan kembalikan hasilnya*/
return new DatePickerDialog(
getActivity(), this, tahun, bulan, tanggal);

}

public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth)
{
int tahun = year;
int bulan = monthOfYear;
int tanggal = dayOfMonth;

Calendar c = Calendar.getInstance();
c.set(tahun, bulan, tanggal);
tahun = c.get(Calendar.YEAR);
bulan = c.get(Calendar.MONTH);
tanggal = c.get(Calendar.DAY_OF_MONTH);

Toast.makeText(getActivity(),
"Anda sudah memilih: " + tanggal +
"/" + (bulan +1) + "/" + tahun,
Toast.LENGTH_SHORT).show();
}
}
3. Kita modifikasi file "MainActivity.java" seperti berikut:
package id.co.blogspot.diansano.viewdasar4;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

FragmentManager fm = getSupportFragmentManager();

TimePickerDF timePickerDF = new TimePickerDF();
DatePickerDF datePickerDF = new DatePickerDF();

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

timePickerDF.show(fm, "TimePicker Dialog");
datePickerDF.show(fm, "DatePicker Dialog");
}
}
4. Jalankan di emulator Android Studio seperti berikut:


Penjelasan:

Untuk membuat 'DatePicker' developer Google menyarankan supaya dijalankan pada 'DialogFragment' karena siklus hidup Dialog akan otomatis ditangani oleh DialogFragment. 

Praktik yang baik adalah dengan membuat class terpisah dengan 'extends' class 'DialogFragment' dan kemudian 'implements' interface 'DatePickerDialog.OnDateSetListener' seperti berikut:
public class DatePickerDF extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
...
}
Berikutnya adalah melakukan override pada method 'onCreateDialog()' untuk mengembalikan object dari class 'DatePickerDialog' seperti berikut:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
/*men-set waktu default utk picker*/
Calendar cal = Calendar.getInstance();
int tahun = cal.get(Calendar.YEAR);
int bulan = cal.get(Calendar.MONTH);
int tanggal = cal.get(Calendar.DAY_OF_MONTH);

/*buat instans object TimePickerDialog dan kembalikan hasilnya*/

return new DatePickerDialog(
getActivity(), this, tahun, bulan, tanggal);
}

Ketika user men-klik tombol pada DatePicker, method 'onDateSet()' dipanggil:
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth)
{
int tahun = year;
int bulan = monthOfYear;
int tanggal = dayOfMonth;

Calendar c = Calendar.getInstance();
c.set(tahun, bulan, tanggal);
tahun = c.get(Calendar.YEAR);
bulan = c.get(Calendar.MONTH);
tanggal = c.get(Calendar.DAY_OF_MONTH);

Toast.makeText(getActivity(),
"Anda sudah memilih: " + tanggal +
"/" + (bulan +1) + "/" + tahun,
Toast.LENGTH_SHORT).show();

}
Di dalam method 'onDateSet()' kita memodifikasi waktu untuk ditampilkan sesuai dengan klik user.

Berikutnya, dalam file "MainActivity.java" kita akan menampilkan dialog yang ada di class terpisah DatePickerDF.java (class DialogFragment). Untuk menampilkannya kita akan menggunakan method 'show()' dari class DialogFragment. Jadi disini kita akan membuat instans terlebih dahulu dari class DatePickerDF.java (yang sudah menerapkan extends 'DialogFragment') dengan kode berikut di awal:
DatePickerDF datePickerDF = new DatePickerDF();
Dengan demikian kita akan memanggil method 'show()' dengan kode seperti berikut:
datePickerDF.show(fm, "DatePicker Dialog");
Method 'show()' di atas memerlukan dua parameter, yang pertama adalah objek 'FragmentManager' dan yang kedua adalah tag yang berupa 'string'.

Karena method 'show()' memerlukan objek 'FragmentManager' maka kita harus terlebih dahulu membuat instans objek dari class 'FragmentManager' yang sudah kita lakukan di atas dengan kode berikut:
FragmentManager fm = getSupportFragmentManager();

No comments: