【问题标题】:Receive fragment result in Navigation Component Fragment在导航组件片段中接收片段结果
【发布时间】:2022-01-15 12:00:18
【问题描述】:

我已经在 MainFragment(包含 NavHost)中实现了 NavHost(Navigation Component),它的导航中还有另外三个片段(CategoryFragmentGalleryFragmentPreviewFragment)

以上三个片段是nav_graph中的sibliing。我想将模型发送到我们的 parentFragment(MainFragment)

我尝试了两种不同的方式将数据发送到 parentFragment(MainFragment)

PreviewFragment.kt 按钮点击

parentFragmentManager.setFragmentResult("requestKey", bundleOf("bundleKey" to args.photo.imageUrl))
findNavController().previousBackStackEntry?.savedStateHandle?.set("requestKey", args.photo.imageUrl)

MainFragment.kt 0nViewCreated

navController.currentBackStackEntry?.savedStateHandle?.getLiveData<String>("requestKey")?.observe(
            viewLifecycleOwner) { result ->
            Toast.makeText(requireContext(), "$result in MainFragment", Toast.LENGTH_SHORT).show()
        }
childFragmentManager.setFragmentResultListener("requestKey") { requestKey, bundle ->
            // We use a String here, but any type that can be put in a Bundle is supported
            val result = bundle.getString("bundleKey")
            Toast.makeText(requireContext(), "$result in MainFragment", Toast.LENGTH_SHORT).show()
            // Do something with the result
        }

我看过帖子说 FragmentManager 应该相同来处理片段结果 api。

我试过 parentFragmentManagerchildFragmentManager 和直接。

【问题讨论】:

标签: android android-fragments navigation


【解决方案1】:

你可以试试这些:

requireActivity().supportFragmentManager.setFragmentResult
requireActivity().supportFragmentManager.setFragmentResultListener

【讨论】:

    【解决方案2】:

    由于导航组件中的 childFragment 和 ParentFragment 之间还有另一个 Fragment(NavHostFragment)。我找到了this here 在 ChildFragment 中,您必须调用

    parentFragment?.parentFragmentManager?.setFragmentResult
    

    并且在 ParentFragment(具有 NavHost)中

    childFragmentManager.setFragmentResultListener
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多