我有一个以 DatePickerDialog 启动 DialogFragment 的 fragment 。我想将日期传回主机 fragment 。我看到有人使用 setTargetFragment 但它已被弃用,在该函数的文档中它说使用 setFragmentResultListener,但 FragmentResultListener.onFragmentResult 函数似乎没有被调用。
我做错了什么,什么是好的约定?
宿主 fragment :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
childFragmentManager.setFragmentResultListener(
REQUEST_DATE,
viewLifecycleOwner,
this
)
}
override fun onFragmentResult(requestKey: String, result: Bundle) {
Log.d(TAG, "Key: $requestKey, Bundle: $result")
}
对话框:
val requestKey = requireArguments().getString(
ARG_REQUEST_KEY,
""
)
val bundle = Bundle().apply {
putSerializable(requestKey, resultDate)
}
requireParentFragment().setFragmentResult(
requestKey,
bundle
)
此外,我在调用 DialogFragment.show 函数时传递了主机 fragment 的 childFragmentManager。
最佳答案
您不想调用 requireParentFragment().setFragmentResult
- 这是在父 Fragment 的 FragmentManager 中设置结果。相反,您只想根据 the documentation 直接在您的 Fragment 上调用 setFragmentResult()
:
val requestKey = requireArguments().getString(
ARG_REQUEST_KEY,
""
)
val bundle = Bundle().apply {
putSerializable(requestKey, resultDate)
}
setFragmentResult(
requestKey,
bundle
)
关于android - 如何在 Dialog 中正确使用 FragmentResultListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66485097/