【问题标题】:Individual Navigation graph for each Bottom navigation view menu item - Android每个底部导航视图菜单项的单独导航图 - Android
【发布时间】:2021-07-28 16:39:33
【问题描述】:

我的应用程序包含一个底部导航视图,主活动中有 3 个菜单项,每个菜单项在导航容器视图中扩展各自的导航图。每个图都有 2 个或更多通过动作连接的片段。

这里的问题是在屏幕方向更改期间应用程序崩溃了。此外,底部导航不保留导航图的状态,也没有为底部导航维护回栈。

下面的代码示例。

val bottomNavigation = binding.bottom_navigation_view
navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController

bottomNavigation.setOnNavigationItemSelectedListener{ item ->
            when(item.itemId){
                R.id.navigation_home ->{
                    val navGraph = navController.navInflater.inflate(R.navigation.nav_graph)
                    navController.graph = navGraph
                    true
                }
                R.id.navigation_search ->{
                    val searchGraph=navController.navInflater.inflate(R.navigation.search_nav_graph)
                    navController.graph = searchGraph
                    true
                }
                R.id.navigation_about ->{
                    val infoGraph = navController.navInflater.inflate(R.navigation.info_nav_graph)
                    navController.graph = infoGraph
                    true
                }
            }
            false
        }

【问题讨论】:

    标签: android android-architecture-navigation android-jetpack-navigation android-navigation-graph android-bottomnavigationview


    【解决方案1】:

    创建NavigationExtension

    以 FragmentContainerView 加载片段

     <androidx.fragment.app.FragmentContainerView
                android:id="@+id/fragmentContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:defaultNavHost="true" />
    

    在 Activity 中设置 NavigationGraph

    private fun setupBottomNavigationBar() {
            val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_nav)
    
            val navGraphIds = listOf(R.navigation.nav_graph, R.navigation.search_nav_graph, R.navigation.info_nav_graph)
    
            // Setup the bottom navigation view with a list of navigation graphs
            val controller = bottomNavigation.setupWithNavController(
                navGraphIds = navGraphIds,
                fragmentManager = supportFragmentManager,
                containerId = R.id.nav_host_container,
                intent = intent
            )
    
            // Whenever the selected controller changes, setup the action bar.
            controller.observe(this, Observer { navController ->
                setupActionBarWithNavController(navController)
            })
            currentNavController = controller
        }
    

    注意:底部导航项 id 和导航图 id 应该相同

    更多细节可以参考这个示例project

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多