Как настроить DrawerLayout с использованием компонентов навигации - PullRequest
1 голос
/ 21 февраля 2020

У меня есть 2 фрагмента, где я хотел бы использовать значок гамбургера для правильного доступа к DrawerLayout.

HomeFragment и FavoritesFragment .

Что происходит, когда я нажимаю значок гамбургера и выбираю пункт меню «Избранное», он перемещается в «Избранное», но значок гамбургера становится стрелкой назад.

Я хотел бы показать значок гамбургера на обоих фрагментах.

Это то, что у меня есть в моей основной деятельности:

    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 Ответ

1 голос
/ 21 февраля 2020

Я закончил тем, что нашел решение для этого с помощью нескольких строк кода: я оставлю закомментированные части кода, которые я заменил.

Объяснение

Таким образом, AppBarConfiguration () принимает 2 параметра, topLevelDestinationIds и pocketLayout. В этом случае у меня есть 2 назначения верхнего уровня, поэтому я помещаю их в набор. в новой конфигурации панели приложений.

Затем я уведомил 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

...