导航组件:从Viewpager中的Fragment导航到另一个Fragment
Navigation Component: Navigate from Fragment in Viewpager to another Fragment
我有一个 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
据我所知,导航组件仍在 Fragment B
上,但我试图从 Fragment C
导航到 Fragment D
,因此它抛出异常。
我(认为)可以通过添加一个侦听器来解决此问题,该侦听器会在 Fragment C
中点击项目时通知 Fragment B
,然后从 Fragment B
导航到 Fragment D
。但是,这将使我的 Fragment C
与我不想要的 Fragment B
紧密耦合。无论如何要解决这个问题是另一种方法吗?
如果您不 navigate()
到 Fragment C
和 Fragment D
,您将停留在您导航到的最后一个目的地:Fragment B
,这是预期的行为。 NavController 对子片段一无所知,例如 Fragment B
的 ViewPager 中的片段,因此您从未将 Fragment C
作为目的地。
如果您从不 navigate()
到 Fragment C
并且它只能作为您的 ViewPager 的一部分可见,那么 Fragment C
不应该 成为 你的图表。 Fragment B
的 ViewPager 中片段的任何操作都应该是直接对 Fragment B
的操作(您实际所在的目的地)。
请注意,您可以在 Fragment D
等片段上重复使用相同的操作名称,前提是您还将它们用作图表中的独立目标(从而确保操作在两种情况下都可用)。
我有一个 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
据我所知,导航组件仍在 Fragment B
上,但我试图从 Fragment C
导航到 Fragment D
,因此它抛出异常。
我(认为)可以通过添加一个侦听器来解决此问题,该侦听器会在 Fragment C
中点击项目时通知 Fragment B
,然后从 Fragment B
导航到 Fragment D
。但是,这将使我的 Fragment C
与我不想要的 Fragment B
紧密耦合。无论如何要解决这个问题是另一种方法吗?
如果您不 navigate()
到 Fragment C
和 Fragment D
,您将停留在您导航到的最后一个目的地:Fragment B
,这是预期的行为。 NavController 对子片段一无所知,例如 Fragment B
的 ViewPager 中的片段,因此您从未将 Fragment C
作为目的地。
如果您从不 navigate()
到 Fragment C
并且它只能作为您的 ViewPager 的一部分可见,那么 Fragment C
不应该 成为 你的图表。 Fragment B
的 ViewPager 中片段的任何操作都应该是直接对 Fragment B
的操作(您实际所在的目的地)。
请注意,您可以在 Fragment D
等片段上重复使用相同的操作名称,前提是您还将它们用作图表中的独立目标(从而确保操作在两种情况下都可用)。