【发布时间】:2021-03-05 00:38:53
【问题描述】:
我有一个以 DatePickerDialog 开头的 DialogFragment 片段。我想将日期传递回主机片段。我看到有人使用 setTargetFragment,但它已被弃用,并且在该函数的文档中它说使用 setFragmentResultListener,但 FragmentResultListener.onFragmentResult 函数似乎没有被调用。
我做错了什么,什么是好的约定?
主机片段:
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 函数时传递了宿主片段的 childFragmentManager。
【问题讨论】: