如何使用导航组件配置DrawerLayout

时间:2020-02-21 09:55:02

标签: android-fragments kotlin navigation-drawer drawerlayout android-jetpack-navigation

我有2个片段,我想在其中使用汉堡包图标正确访问DrawerLayout。

HomeFragment FavoritesFragment

发生的是,当我单击汉堡包图标并选择“收藏夹”菜单项时,它导航到“收藏夹片段”,但是汉堡包图标变为后退箭头。

我想在两个片段上显示汉堡图标。

这是我的MainActivity上的内容:

    setupActionBarWithNavController(navController, drawerLayout)
    setupWithNavController(binding.navView, navController)

    navController.addOnDestinationChangedListener { controller, destination, _ ->
        when (destination.id) {
            R.id.categoryFragment -> drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
            R.id.favoritesFragment -> drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
            else -> drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
        }
    }

Home Fragment Favorites Fragment

1 个答案:

答案 0 :(得分:1)

我最终用几行代码找到了解决方案: 我将在已替换的代码部分中留下注释。

说明

因此AppBarConfiguration()接受2个参数,topLevelDestinationIds和抽屉布局,在这种情况下,我有2个顶级目标,因此将它们放在Set中。

我没有将抽屉式布局传递给setupActionBarWithNavController,而是传递了新的Appbar配置。

然后我使onSupportNavigateUp意识到应该考虑到AppBar配置。

     appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.categoryFragment,
            R.id.favoritesFragment
        ), drawerLayout
    )
    //setupActionBarWithNavController(navController, drawerLayout)
    setupActionBarWithNavController(navController, appBarConfiguration)

override fun onSupportNavigateUp(): Boolean {
    //return navigateUp(navController, drawerLayout)
    return navigateUp(navController, appBarConfiguration)
}

FavoritesFragment