首页 > 解决方案 > 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();
但是如果我在这些子片段之一中,找到父片段(主片段)并找到布局视图并关闭它会很痛苦。另外如何使用该返回事件?提前致谢

标签: androidnavigation-drawer

解决方案


推荐阅读