我有一个名为Fragment A
的碎片,它可以导航到Fragment B
。
Fragment B
托管了一个ViewPager2
。
ViewPager2
中有两个碎片——Fragment C
和Fragment D
。
在Fragment C
中单击某个项后,我想在Fragment B
上方导航到Fragment D
的新实例。
目前,我的代码类似于以下内容 -
findNavController().navigate(
R.id.action_FragmentC_to_FragmentD,
bundleOf("id" to id, "type" to "list")
)
然而,当我尝试导航时,会出现以下异常 -
java.lang.IllegalArgumentException: Navigation action/destination com.test.at:id/action_FragmentC_to_FragmentD cannot be found from the current destination Destination(com.krtkush.audiotime:id/FragmentB) label=FragmentB
根据我理解,导航组件仍然停留在“片段B”,但我正在尝试从“片段C”导航到“片段D”,因此它抛出了异常。
我认为可以通过添加监听器来解决这个问题,在“片段C”中向“片段B”发送信息,以便在“片段B”中导航到“片段D”。然而,这会使我的“片段C”与“片段B”紧密耦合,而我不想这样。是否有其他方法可以解决这个问题?
findNavController().navigate()
代码,所以我不知道你认为发生了什么额外的耦合? - ianhanniballakeFragment C
可以自己调用findNavController().navigate()
而没有任何问题。只要当你实际上在Fragment B
上时,你的操作就需要在Fragment B
上。根据最后一段,如果你也在独立于你的ViewPager使用它的情况下,你肯定可以在Fragment C
上使用相同的操作名称,而不改变Fragment C
的代码。 - ianhanniballakeFragment E
单独打开Fragment C
,我们不能重复使用相同的代码。在这种情况下,Fragment C
有一个在按钮点击时触发的代码findNavController().navigate(FragmentBDirections.actiontoFragmentC())
。它会抛出异常,指示在目标Fragment E
上找不到该操作。 - undefined