개발일기

23.11.1 112일차 개발일기 bundle.putParcelable("calendarModel", calendarModel)

빛나는맛과탕탕 2023. 11. 1. 11:15
반응형

데이터 전달이 원하는 대로 작동하지 않는 경우 몇 가지 확인해야 할 사항이 있습니다:

  1. 데이터 전달 코드: bundle.putParcelable("calendarModel", calendarModel)와 같이 데이터를 번들에 올바르게 추가했는지 확인하세요. calendarModel은 Parcelable을 구현하고 있어야 합니다.
  2. 데이터 수신 코드: CalendarEditDialogFragment에서 데이터를 올바르게 수신하고 있는지 확인하세요. 데이터를 추출하는 부분이 정확해야 합니다.
  3. 프래그먼트 관리: 프래그먼트 관리자를 사용하여 프래그먼트를 표시하고, 올바른 프래그먼트 매니저를 사용하고 있는지 확인하세요. 예를 들어 parentFragmentManager를 사용하고 있는데, 이것이 바람직한 프래그먼트 매니저인지 확인하세요.
  4. 프래그먼트 라이프사이클: 프래그먼트 라이프사이클 상태에 따라 데이터 전달을 수행해야 합니다. 데이터를 전달하는 코드가 프래그먼트가 올바른 상태에 있을 때 실행되는지 확인하세요.

데이터 전달 시 fragment와 dialog사이에 수신 여부를 확인하는 코드를 작성해야 되는데 쉽지가 않았다.

 

bundle로 해결해보려 했으나 resultfragmentlistener로 구현해보기로 하였습니다.

 

val bundle = Bundle()
bundle.putParcelable("calendarModel", calendarModel)
parentFragmentManager.setFragmentResult("request_key", bundle)
editDialogFragment.arguments = bundle
editDialogFragment.show(parentFragmentManager, editDialogFragment.tag)

 

fragment에서 bundle로 데이터 보내는 코드이다.

editdialog에 데이터를 보내고 싶을때

 

받을때 코드 이다.

val calendarModel = arguments?.getParcelable<CalendarModel>("calendarModel")

if (calendarModel != null) {
    val memoText = calendarModel.memo
    val place = calendarModel.place
    val schedule = calendarModel.schedule

    binding.edtCalendarEditMemo.setText(memoText)
    binding.edtCalendarEditPlace.setText(place)
    binding.edtCalendarEditSchedule.setText(schedule)
}

 

 kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized
                                                                                                     at CalendarAddDialogFragment.onViewCreated(CalendarAddDialogFragment.kt:51)

반응형