DialogFragment를 dismiss() 할 때 안전하게 값 전달 (setFragmentResultListener 사용)

setTargetFragment() 가 눈치채면 deprecated(비추천)가 되어 있었으므로 재작성하자・・・

나는 생각해 보았지만 생각 외에도 자신 만의 콜백을하고있는 기사 만

자작 콜백은 그만두는 것이 좋습니다.
화면 회전이나 bluetooth의 온 오프 등, 뭔가의 설정 변경을 하면 크래쉬해 버리기 때문에.

그렇기 때문에, 이것저것 조사하고 있으면 재작성하는 방법을 알았으므로 공유합니다.

우선 호출자에게

ParentFragment.kt
   override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        this.childFragmentManager.setFragmentResultListener(
            RESULT_CODE,
            this,
            { requestKey, bundle ->
                // ここにコールバックされます
            })
    }

이렇게 씁니다.
주의할 점은 childFragmentManager를 사용하는 것입니다.
자식 fragment에 청취자를 설정하기 때문에 이쪽입니다.

다음으로 발신자에 관한 것이지만,

childDialogFragment.kt
    companion object {
        const val RESULT_CODE = "111"
    }

    override fun onCreate(savedInstanceState: Bundle?)) {
        viewModel.hoge.observe(this) {
            this.parentFragmentManager.setFragmentResult(RESULT_CODE, Bundle())
            dismiss()
        }
    }

여기에서도 주의 포인트는 parentFragmentManager를 사용하는 것입니다.
여기에서는 Bundle()을 그대로 인수에 건네주고 있습니다만, 만약 무엇인가 그 밖에도 값을 부모에게 콜백하고 싶으면 좋게 설정해 주세요.

좋은 웹페이지 즐겨찾기