android - setupWithNavController 时导航抽屉不关闭
问题描述
我遵循导航 UI 文档。( https://developer.android.com/guide/navigation/navigation-ui#add_a_navigation_drawer ) 用导航 UI 设置我的抽屉。
问题是,当点击设备的后退按钮时,当它转到上一页时抽屉仍然打开。
我希望它关闭抽屉并使用该事件,或者如果抽屉未打开返回上一页。
这是我的 navGraph,其中 homeFragment 包含抽屉布局
首页片段
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Layout to contain contents of main body of screen (drawer will slide over this) -->
<LinearLayout
...
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_home"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_content" />
</LinearLayout>
<!-- Container for contents of drawer - use NavigationView to make configuration easier -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:itemIconTint="@color/colorLightBlue"
app:itemTextColor="@color/colorDarkBlue"
app:menu="@menu/menu_drawer"
android:layout_weight="1">
</androidx.drawerlayout.widget.DrawerLayout>
HomeFragment.kt 将 NavigationView (binding.navView) 与 navGraph nav_content 绑定
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// bind the drawer with the navigation graph
val navHostFragment = childFragmentManager.findFragmentById(R.id.nav_host_home) as NavHostFragment
val navController = navHostFragment.navController
binding.drawerLayout.nav_view.setupWithNavController(navController)
binding.navView.setupWithNavController(navController)
nav_content nav Graph,homeFragment 的孩子
概括
我知道有mDrawerLayout.closeDrawers();
但是如果我在这些子片段之一中,找到父片段(主片段)并找到布局视图并关闭它会很痛苦。另外如何使用该返回事件?提前致谢
解决方案
推荐阅读
- arrays - 控制台返回整个数组,但当我想要它的第一个元素时返回“未定义”
- windows - 在windows中如何创建一个快捷方式使系统关机或休眠?
- arrays - 在字典中组合(所有单独的)数组元素
- javascript - 类型ORM关系和表达
- python-3.x - 在 Python 错误中通过 Instagram Graph api 发表评论
- java - What should I set JAVA_HOME to using multiple jdks?
- mysql - 通过不按我的意愿工作来续集聚合组
- javascript - Javascript 待办事项列表应用程序。我无法删除最后剩余的 li 并清除所有按钮不起作用,只有本地存储被删除
- clickhouse - clickhouse create table 异常:在查询中发现聚合函数 minState(origin_user) 在错误的位置
- python - Pandas df如何解析列值以使用正则表达式将字符串提取为int