【问题标题】:Android Jetpack Navigation nested tab backward navigation strange behaviourAndroid Jetpack Navigation 嵌套选项卡向后导航的奇怪行为
【发布时间】:2018-12-21 02:56:33
【问题描述】:

所以我正在尝试使用 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。

最小demo项目可以在here找到,希望有人能帮忙,谢谢。

【问题讨论】:

    标签: android android-architecture-navigation


    【解决方案1】:

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

    要让系统后退按钮弹出 Fragment C 的子 Fragments,您必须通过调用 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()
    }
    

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

    【讨论】:

    • 您好,感谢您的快速回复!所以 setPrimaryNavigationFragment() 确实有帮助,现在弹出序列变为 CC -> CA -> A,这是 BottomNavigationView 的预期行为吗?因为我想要实现的是CC->CB->CA->B->A,有什么建议吗?如果 setPrimaryNavigationFragmet() 与 app:defaultNavHost="true" 相同,为什么它没有像我在 fragment_c.xml 中设置的那样做?
    • 是的,该返回堆栈是预期的(底部导航总是通过图形的startDestination 返回,但不通过中间项)。外部NavHostFragment 上的defaultNavHost 使其与活动的FragmentManager 和内部NavHostFragment 上的defaultNavHost 一起成为主要片段的子片段管理器,但这错过了NavHostFragment 的片段管理器(即,每个目的地所在的 FragmentManager),因此您需要在该中间级别手动设置它。
    • FWIW,this issue 指出,一旦 alpha04 出现,Navigation 会自动为您调用 setPrimaryNavigationFragment
    猜你喜欢
    • 2019-05-10
    • 2020-07-05
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多