728x90
달력, 시간 다이얼로그와 다이얼로그 프래그먼트
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val calendar = Calendar.getInstance()
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH)
val dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH)
//DatePickerDialog
binding.btnDatePickerDialog.setOnClickListener {
val listener = OnDateSetListener { _, year, month, dayOfMonth ->
//날짜 선택 후 처리
}
val datePicker = DatePickerDialog(this, listener, year, month, dayOfMonth)
datePicker.show()
}
//TimePickerDialog
binding.btnTimePickerDialog.setOnClickListener {
val hourOfDay = calendar.get(Calendar.HOUR_OF_DAY)
val minute = calendar.get(Calendar.MINUTE)
val listener = OnTimeSetListener{_,hourOfDay,minute->
//시간 선택 후 처리
}
val timePickerDialog = TimePickerDialog(this,listener,hourOfDay,minute,false)
timePickerDialog.show()
}
//DialogFragment
binding.btnFragmentDialog.setOnClickListener {
MyDialogFragment().show(supportFragmentManager,"MyDialogFragment")
}
}
}
DialogFragment
DialogFragment 는 안드로이드에서 대화상자 형태의 UI를 구현할 때 사용하는 클래스이다. 이는 Fragment 클래스를 상속받아 모든 기능을 제공하면서, 추가로 대화상자를 관리하는 기능을 가지고 있다. DialogFragment를 사용하면 대화상자의 생명주기를 더욱 세밀하게 관리할 수 있으며, 화면 회전 같은 구성 변경 시에도 대화상자의 상태를 유지할 수 있다.
DialogFragment는 여러 가지 방법으로 사용될 수 있다. 일반적으로는 다음과 같은 용도로 사용된다:
- 전통적인 대화상자
- 부모 액티비티의 컨텍스트 내에서 실행되는 내장된 프래그먼트
- 대화상자와 유사한 UI를 가진 전체 화면 프래그먼트
대화상자를 사용하는 전형적인 시나리오로는 사용자에게 결정을 요구하거나, 추가 정보를 입력받거나, 알림을 제공하는 등이 있다.
DialogFragment 예제
class MyDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setMessage("다이얼로그 프래그먼트")
.setPositiveButton("네") { dialog, id ->
//positive 작업
}
.setNegativeButton("아니오") { dialog, id ->
//negative 작업
}
builder.create()
} ?: throw IllegalStateException("Activity cannot be null") //예외처리
}
}
이 DialogFragment는 onCreateDialog 메서드를 오버라이드하여 AlertDialog를 생성하고 구성한다.
MainActivity는 버튼을 클릭하면 MyDialogFragment를 표시한다. show 메서드는 FragmentManager와 대화상자의 태그를 인자로 받는다.