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")
        }
        
    }
}

DataPickerDialog,TimePickerDialog

 

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와 대화상자의 태그를 인자로 받는다.

+ Recent posts