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()을 그대로 인수에 건네주고 있습니다만, 만약 무엇인가 그 밖에도 값을 부모에게 콜백하고 싶으면 좋게 설정해 주세요.
Reference
이 문제에 관하여(DialogFragment를 dismiss() 할 때 안전하게 값 전달 (setFragmentResultListener 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/marienplatz/items/789a465f362e70bad3cb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)