3

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

  • MainActivity(带有 nav_host_fragment、navigation_graph、bottom_navigation)
    • 片段A
    • 片段B
    • FragmentC(带有nested_nav_host_fragment、nested_navigation_graph、nested_bottom_navigation)
      • 片段CA
      • 片段CB
      • 片段CC

我向前导航没有问题,但我无法正确向后导航。例如,当我从 A -> B -> C 导航并在 C 中导航 CA -> CB -> CC,然后单击返回按钮或调用 navControler 时,它应该从 CC -> CB -> CA -> B -> A,但它直接去了A。

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

4

1 回答 1

5

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

要让系统后退按钮弹出片段 C 的子片段,您必须通过调用setPrimaryNavigationFragment()来明确选择该行为。

这可以在附加 Fragment 后在 Fragment 中的任何位置完成。例如,您可以更新 FragmentC 以在以下位置执行此操作onActivityCreated()

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()
}

这实际上与app:defaultNavHost="true"on 属性在NavHostFragment后台使用的技术相同。

于 2018-07-12T19:41:59.243 回答