使用片段时是否在 activity_main.xml 中使用 DrawerLayout?

Do I use DrawerLayout in activity_main.xml when using fragments?

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

在您的 activity_main.xml 中用 DrawerLayout 包裹您的主布局。因为您希望它可以从任何地方访问,所以您不需要在 navController 上添加 addOnDestinationChangedListener。但是如果你不想要特定的片段,那么你必须添加它并放置条件来检查 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)
    }
}