DVT*_*DVT 5 android android-fragments
我有一个用 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")
}
Run Code Online (Sandbox Code Playgroud)
对话:
val requestKey = requireArguments().getString(
ARG_REQUEST_KEY,
""
)
val bundle = Bundle().apply {
putSerializable(requestKey, resultDate)
}
requireParentFragment().setFragmentResult(
requestKey,
bundle
)
Run Code Online (Sandbox Code Playgroud)
另外,我在调用 DialogFragment.show 函数时传递主机片段的 childFragmentManager 。
您不想调用requireParentFragment().setFragmentResult- 这是在父 Fragment 的 FragmentManager 中设置结果。相反,您只想setFragmentResult()按照文档直接调用 Fragment :
val requestKey = requireArguments().getString(
ARG_REQUEST_KEY,
""
)
val bundle = Bundle().apply {
putSerializable(requestKey, resultDate)
}
setFragmentResult(
requestKey,
bundle
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4425 次 |
| 最近记录: |