在 FragmentResultListener 中无法从当前目的地找到导航操作/目的地操作

发布于 2025-01-13 05:45:12 字数 911 浏览 0 评论 0原文

如果我在 FragmentResultListener 内调用 findNavController() ,导航将不起作用,但如果我添加一些延迟,导航将不起作用

java.lang.IllegalArgumentException:导航操作/目的地 无法从当前目的地找到操作

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    ...

    setFragmentResultListener(MyFragment.RESULT_SOME_EVENT) { _, b ->
       
        viewLifecycleOwner.lifecycleScope.launchWhenResumed {
            delay(1000L) // if I remove it then I receive the crash
            findNavController().navigate(
                MyFragmentDirections.actionGoToAnotherFragment()
            )
        }
    }
}

我该如何修复?

我显示一些带有两个按钮的片段对话框,在用户选择某些内容后,它为片段设置结果,对话框关闭,之后在父片段上它应该更改目的地 - 转到下一个片段

我明白为什么会发生这种情况,导航组件认为片段对话框仍然存在显示但我使用 viewLifecycleOwner.lifecycleScope.launchWhenResumed 仍然没有帮助,直到我添加一些延迟

Navigation doesn't work if I call findNavController() inside FragmentResultListener, though if I add some delay than it works

java.lang.IllegalArgumentException: Navigation action/destination
action cannot be found from the current destination

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    ...

    setFragmentResultListener(MyFragment.RESULT_SOME_EVENT) { _, b ->
       
        viewLifecycleOwner.lifecycleScope.launchWhenResumed {
            delay(1000L) // if I remove it then I receive the crash
            findNavController().navigate(
                MyFragmentDirections.actionGoToAnotherFragment()
            )
        }
    }
}

How can I fix it?

I show some fragment dialog with two buttons, after user selects something it set result for fragment, dialog dismiss and after that on parent fragment it should change destination - go to next fragment

I understand why it happens, navigation component thinks that fragment dialog is still showing but I use viewLifecycleOwner.lifecycleScope.launchWhenResumed and still it doesn't help, only until I add some delay

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

脱离于你 2025-01-20 05:45:12

通过将片段对话框内的逻辑从: 更改

binding.someButton.setOnClickListener {
    setFragmentResult(....)
    dismiss()
}

为: 来修复

binding.someButton.setOnClickListener {
    findNavController().navigateUp() // sync method 
    setFragmentResult(....)
}

fixed by changing logic inside fragment dialog from:

binding.someButton.setOnClickListener {
    setFragmentResult(....)
    dismiss()
}

to:

binding.someButton.setOnClickListener {
    findNavController().navigateUp() // sync method 
    setFragmentResult(....)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文