https://ranseo.tistory.com/296
[Android/Kotlin] 대화상자(Dialog) (1) AlertDialog
대화상자 Dialog 사용자에게 결정을 내리거나 추가 정보를 입력하라는 메세지를 표시하는 작은 창이다. (경우에 따라서 화면을 가득 채우기도 한다.) 사용자는 어떠한 뷰(버튼, 뷰 클릭)와 상호작
ranseo.tistory.com
DatePickerDialog & TimePickerDialog
미리 정의된 UI (라이브러리를 통해) 가 있는 대화상자이며, 사용자가 날짜 또는 시간을 선택할 수 있다.
DialogFragment
class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
...
return DatePickerDialog(...)
}
override fun onDateSet(p0:DatePicker?, p1: Int, p2:Int, p3:Int) {
...
}
}
DialogFragment를 상속받는 Fragment.
onCreateDialog()메서드에서 DatePickerDialog 객체를 만들어 return 한다.
이 때 객체에 필요한 매개변수가 DatePickerDialog의 OnDateSetListener interface 이다.
따라서 해당 Fragment는DatePickerDialog.OnDateSetListener를 구현하여 클래스 내에 onDateSet()메서드를 재정의.
만약 TimePickerDialog를 생성하고 싶다면,
class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
...
return TimePickerDialog(...)
}
override fun onTimeSet(p0:DatePicker?, p1: Int, p2:Int, p3:Int) {
...
}
}
마찬가지로 TimePickerDialog의 interface를 구현한다.
Dialog 생성
1. DatePickerDialog
override onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(requireActivity(),this, year, month, day)
}
Calendar 객체를 통해 년, 월, 일 에 해당하는 값을 받아오고 DatePickerDialog() 에 인자로 넘겨준다.
DatePickerDialog의 매개변수는 다양하지만 보통
1.context // 2.OnDateSetListener // 3~5. Int (년,월,일)
과 같은 형식이다.
2.TimePickerDialog
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val hour = c.get(Calendar.HOUR_OF_DAY)
val min = c.get(Calendar.MINUTE)
return TimePickerDialog(requireContext(), this, hour, min, true)
}
Calendar 객체를 통해 시간, 분 에 해당하는 값을 받아오고 TimePickerDialog()에 인자로 넘겨준다.
TimePickerDialog의 매개변수는 보통
1.context // 2.OnTimeSetListener // 3~4. Int (시간,분) // 5. Boolean (시간표시 12시간 - false, 24시간 - true)
외부와 연결할 Listener 설정
DatePickerDialog 또는 TimePickerDialog 는 각 onDateSet, onTimeSet 메서드를 이용해 사용자에 의해 선택된 날짜 및 시간을 받아올 수 있다.
이때 listener를 이용하여 해당 메서드 내에 넣어준다면 외부 코드와 쉽게 연결이 가능하다.
//리스너 설정
class DatePickerDialogFragment(_listener:OnDatePickerDialogListener) : DialogFragment(), DatePickerDialog.OnDateSetListener {
private val listener = _listener
interface OnDatePickerDialogListener {
fun onDateSet(year:Int, month:Int, day:Int)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(requireActivity(),this, year, month, day)
}
override fun onDateSet(p0: DatePicker?, p1: Int, p2: Int, p3: Int) {
listener.onDateSet(p1,p2,p3)
}
}
//외부 프래그먼트에서 사용
class SolaroidAddFragment : Fragment(), SaveDialogFragment.EditSaveDialogListener
,DatePickerDialogFragment.OnDatePickerDialogListener {
...
fun showDatePickerDialog() {
val newFragment = DatePickerDialogFragment(this)
newFragment.show(parentFragmentManager, "DatePicker")
}
override fun onDateSet(year: Int, month: Int, day: Int) {
viewModel.setDate(convertTodayToFormatted(convertDateToLong(year,month,day)))
}
}
'안드로이드' 카테고리의 다른 글
[Android/Kotlin] 대화상자 Dialog (3) BottomSheetDialogFragment (0) | 2022.06.06 |
---|---|
[Android/Kotlin] (작은) 키-값 데이터 저장 : SharedPreference API (=공유 환경 설정) (0) | 2022.05.31 |
[Android/Kotlin] NavigationView itemSeletedListener 설정하기. (0) | 2022.05.27 |
[Android/Kotlin] CollapsingToolbarLayout 만들어보기. (0) | 2022.05.23 |
[Android/Kotlin] 앱 바 App bar (3) NavigationUI와 App bar (0) | 2022.05.23 |