findNavController()如果我在里面打電話,導航不起作用FragmentResultListener,但如果我添加一些延遲,它就會起作用
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它仍然沒有幫助,直到我添加一些延遲
uj5u.com熱心網友回復:
通過更改片段對話框中的邏輯來修復:
binding.someButton.setOnClickListener {
setFragmentResult(....)
dismiss()
}
到:
binding.someButton.setOnClickListener {
findNavController().navigateUp() // sync method
setFragmentResult(....)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/444720.html
