Android Jetpack导航嵌套选项卡向后导航奇怪的行为

Android Jetpack导航嵌套选项卡向后导航奇怪的行为,android,android-architecture-navigation,Android,Android Architecture Navigation,所以我正在尝试Jetpack导航组件和BottomNavigationView。我创建了两层BottomNavigationView,其结构如下所示: MainActivity(带导航主机片段、导航图、底部导航) 碎片 碎片B FragmentC(带有嵌套的导航主机片段、嵌套的导航图、嵌套的底部导航) 碎片 碎片 碎片 我可以向前导航,但不能正确向后导航。 例如,当我从A->B->C导航时,在C导航CA->CB->CC,然后单击后退按钮或调用NavController后退,它应该从C

所以我正在尝试Jetpack导航组件和BottomNavigationView。我创建了两层BottomNavigationView,其结构如下所示:

  • MainActivity(带导航主机片段、导航图、底部导航)
    • 碎片
    • 碎片B
    • FragmentC(带有嵌套的导航主机片段、嵌套的导航图、嵌套的底部导航)
      • 碎片
      • 碎片
      • 碎片
我可以向前导航,但不能正确向后导航。 例如,当我从A->B->C导航时,在C导航CA->CB->CC,然后单击后退按钮或调用NavController后退,它应该从CC->CB->CA->B->A导航,但它直接转到A


可以找到最小的演示项目,希望有人能帮助,谢谢。

默认情况下,片段不会弹出添加到子片段后堆栈中的任何内容

要让system back按钮弹出片段C的子片段,您必须通过调用

这可以在片段附加后在片段中的任何位置执行。例如,您可以在ActivityCreated()上更新FragmentC以执行此操作。:


这实际上与
NavHostFragment
上的
app:defaultNavHost=“true”
属性在引擎盖下使用的技术相同。

嘿,感谢您的快速回复!setPrimaryNavigationFragment()确实有帮助,现在pop序列变成了CC->CA->A,这是BottomNavigationView的预期行为吗?因为我想要实现的是CC->CB->CA->B->A,有什么建议吗?如果setPrimaryNavigationFragmet()与app:defaultNavHost=“true”相同,为什么它没有像我在fragment_c.xml中设置的那样做呢?是的,这是应该的(底部nav总是返回到图的
startDestination
,但不经过中间项)。外部
NavHostFragment
上的
defaultNavHost
使其成为活动碎片管理器的主要对象,而内部
NavHostFragment
上的
defaultNavHost
使其成为碎片子碎片管理器的主要对象,但这遗漏了
NavHostFragment
的碎片管理器(即,每个目的地都在FragmentManager中),因此您需要手动将其设置在中间级别。FWIW注意,一旦alpha04出现,导航将自动为您调用
setPrimaryNavigationFragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    NavigationUI.setupWithNavController(nested_bottom_navigation,
            activity?.findNavController(R.id.nested_nav_host_fragment)?:return)

    // This routes the system back button to this Fragment
    requireFragmentManager().beginTransaction()
            .setPrimaryNavigationFragment(this)
            .commit()
}