导航组件:从 Viewpager 中的片段导航到另一个片段



我有一个导航到Fragment BFragment A

Fragment B举办ViewPager2

ViewPager2里面有两个充气的碎片——Fragment CFragment 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

据我所知,导航组件仍在Fragment B但我正在尝试从Fragment C导航到Fragment D,因此它抛出异常。

我(认为)可以通过添加一个侦听器来解决此问题,该侦听器会在Fragment C中点击该项目时通知Fragment B,然后从Fragment B导航到Fragment D。但是,这将使我的Fragment C与我不想Fragment B紧密结合。无论如何解决这个问题是另一种方法?

如果您不navigate()Fragment CFragment D,您将保留在导航到的最后一个目的地:Fragment B,这是预期的行为。导航控制器对子片段一无所知,例如Fragment B的 ViewPager 中的片段,因此您从未Fragment C作为目的地。

如果您从未navigate()Fragment C,并且它只能作为 ViewPager 的一部分查看,则Fragment C不应出现在您的图表中。来自Fragment B的 ViewPager 中的片段的任何操作都应该是直接对Fragment B(您实际所在的目的地)的操作。

请注意,如果您还将片段(如Fragment D)用作图形中的独立目标,则可以在片段上重复使用相同的操作名称(从而确保操作在这两种情况下都可用)。

最新更新