无法从 FragmentResultListener 中的当前目的地找到导航 action/destination 操作
Navigation action/destination action cannot be found from the current destination in FragmentResultListener
如果我在 FragmentResultListener
中调用 findNavController()
,导航将无法正常工作,但如果我添加一些延迟,导航将无法正常工作
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()
)
}
}
}
我该如何解决?
我展示了一些带有两个按钮的片段对话框,在用户选择它为片段设置结果后,对话框关闭,然后在父片段上它应该改变目的地 - 转到下一个片段
我明白为什么会这样,导航组件认为片段对话框仍在显示,但我使用 viewLifecycleOwner.lifecycleScope.launchWhenResumed
但它仍然无济于事,直到我添加一些延迟
已通过更改片段对话框内的逻辑修复:
binding.someButton.setOnClickListener {
setFragmentResult(....)
dismiss()
}
至:
binding.someButton.setOnClickListener {
findNavController().navigateUp() // sync method
setFragmentResult(....)
}
如果我在 FragmentResultListener
中调用 findNavController()
,导航将无法正常工作,但如果我添加一些延迟,导航将无法正常工作
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()
)
}
}
}
我该如何解决?
我展示了一些带有两个按钮的片段对话框,在用户选择它为片段设置结果后,对话框关闭,然后在父片段上它应该改变目的地 - 转到下一个片段
我明白为什么会这样,导航组件认为片段对话框仍在显示,但我使用 viewLifecycleOwner.lifecycleScope.launchWhenResumed
但它仍然无济于事,直到我添加一些延迟
已通过更改片段对话框内的逻辑修复:
binding.someButton.setOnClickListener {
setFragmentResult(....)
dismiss()
}
至:
binding.someButton.setOnClickListener {
findNavController().navigateUp() // sync method
setFragmentResult(....)
}