首页 > 解决方案 > 使用片段时是否在 activity_main.xml 中使用 DrawerLayout?

问题描述

我正在构建一个带有 android jetpack 导航和片段的应用程序。我想在我的应用程序中包含一个导航抽屉,但我不确定我将把 DrawerLayout 标签放在哪里。我希望大多数(但不是全部)片段都可以访问导航抽屉。我是把这个标签放在 activity_main.xml 中还是放在我想在其中包含导航抽屉的每个布局文件中?谢谢!

标签: androidandroid-fragmentsandroid-jetpack

解决方案


在你activity_main.xml的主布局中用DrawerLayout. 由于您希望它可以从任何地方访问,因此您无需添加addOnDestinationChangedListenernavController。但是,如果您不想要特定片段,则必须添加它并设置条件以检查 NavDestination 并将其锁定如下

navController.addOnDestinationChangedListener { nc: NavController, nd: NavDestination, _: Bundle? ->
    if (nd.id == nc.graph.startDestination) {
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
    } else {
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
    }
}

推荐阅读