我們今天嘗試來實作可以選擇日期跟時間的 Dialog 。
Android 的 Dialog 是透過實作 Dialog Fragment,這樣你就可以獲得一個基本的對話 Dialog 。
但官網建議盡量避免直接使用 Dialog 可以使用 AlertDialog 來取代。
那讓我們來看看如何實作一個讓使用者選擇日期的 DateDialog 吧
class DatePickerFragment: DialogFragment(), DatePickerDialog.OnDateSetListener {
private var partyDate: String = ""
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val years = c.get(Calendar.YEAR)
val months = c.get(Calendar.MONTH)
val days = c.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(activity, this, years, months, days)
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
partyDate = "$year - $month - $dayOfMonth"
val tv: TextView = activity?.findViewById(R.id.pickDateTextView) as TextView
tv.text = "$year - $month - $dayOfMonth"
}
fun getDate(): String {
return partyDate
}
我們透過實作 Dialog Fragment 後,它會需要 override onCreateDialog 這裡我們就可以決定我們需要用到什麼類型的 Dialog。
我們這裡希望我們可以建立一個 DateDialog 所以,我們建立好 DateDialog 後將它回傳。
同時我們也可以注意到,我們同時實做了 DatePickDialog.OnDateSetListener 這樣我們就可以取得使用者所選取的資料。
最後我們建立了一個 getDate 的 function 來讓其他需要這筆資料的地方可以使用。
關於時間的 Dialog 也是一樣的作法,我們就看看如何實作,但不多做解釋囉。
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {
private var partyTime = ""
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val hours = c.get(Calendar.HOUR_OF_DAY)
val minutes = c.get(Calendar.MINUTE)
return TimePickerDialog(activity, this, hours, minutes, true)
}
override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
partyTime = "$hourOfDay : $minute"
val tv = activity?.findViewById(R.id.pickTimeTextView) as TextView
tv.text = "$hourOfDay : $minute"
}
fun getTime():String {
return partyTime
}
}
今天就先這樣囉,我們明天見~~
對話方塊
DatePickerDailog
TimePickerDailog