android - 如何在 Dialog 中正确使用 FragmentResultListener

标签 android android-fragments

我有一个以 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/

相关文章:

android - 今天我尝试 viewBinding 但最终出现错误

android - Android 推送通知使用 GCM 是否免费

android - 使用 TabLayout Viewpager 时出现 "Already managing a GoogleApiClient with id 0"异常

Java android java.util.ConcurrentModificationException

android - 无法从 GraphRequest Facebook 获取值

android - 选择项目后如何关闭抽屉导航?

android - Android fragment 中的 dispatchTouchEvent

android - Android Bottom Sheet 上的静态页脚 View

java - 使用 onTouchListener 旋转图像而不缩放图像

android - 如何正确管理android中的 fragment ?