Как отключить превращение иконки гамбургера в стрелку (компонент навигации)

Помогите мне, пожалуйста.
Введение: я использую компонент навигации, шаблон одиночного действия с 3 фрагментами, переключаемыми через нижнее меню навигации. Также у меня есть навигация по ящикам.
Все фрагменты одного уровня (все корневые, доступ к ним осуществляется непосредственно из нижней части навигации).
Как все должно быть: для всех фрагментов должна быть панель инструментов со значком гамбургера для ящика.
Проблема: при запуске приложения в домашнем фрагменте отображается стандартный значок гамбургера для ящика, и это нормально. Но когда я переключаюсь на любой другой фрагмент, значок ящика превращается в значок стрелки. Кроме того, при нажатии стрелки ящик сдвигается слева. Это означает, что он по-прежнему работает как кнопка для отображения меню ящика, но изменился только значок.
Вопрос: как отключить преобразование значок гамбургера в значок стрелки при переходе к другим фрагментам из нижнего меню навигации?
Файлы: График навигации:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph"
    app:startDestination="@id/bottom_nav_proposals"
    >
    <fragment
        android:id="@id/bottom_nav_proposals"
        android:name="com.base.ProposalsContainerFragment"
        android:label="fragment_proposals"
        tools:layout="@layout/fragment_proposals" />
    <fragment
        android:id="@id/bottom_nav_vehicles"
        android:name="com.base..DriversVehiclesFragment"
        android:label="Vehicles" >
    </fragment>
    <fragment
        android:id="@id/bottom_nav_drivers"
        android:name="com.bijov1apps.base.carrier.root.drivers.DriversVehiclesFragment"
        android:label="Drivers" >
    </fragment>
</navigation>

Деятельность:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//initializing Navigation COmponent
       val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_carrier_root) as NavHostFragment
        val navController = navHostFragment.navController
//setting up toobar stuff
        val toolbar: Toolbar = findViewById(R.id.toolbar_root)
        toolbar.setupWithNavController(navController, drawerLayout)
//setting up navigation drawer stuff
        val drawerLayout:DrawerLayout = findViewById(R.id.drawer_layout)
        val navView: NavigationView = findViewById(R.id.nav_view)
        val toggle = ActionBarDrawerToggle(
            this, drawerLayout, toolbar, R.string.navigation_drawer_open, 
        R.string.navigation_drawer_close
        )
        drawerLayout.addDrawerListener(toggle)
        toggle.syncState()
        navView.setNavigationItemSelectedListener(this)
//setting up bottom navigation menu stuff
        val bottomNavigationView = findViewById<BottomNavigationView>(R.id.logisticBottomBar)
        bottomNavigationView.setupWithNavController(navController)
}

person Waldmann    schedule 17.06.2020    source источник
comment
Убедитесь, что ваши идентификаторы в Navigation Graph и в XML-файле меню совпадают. См. Это видео для получения дополнительной информации: youtu.be/wv5VFEcnb-8?t=217 (Видео начнется с правильной отметки времени, когда он объяснит идентификаторы).   -  person René Jörg Spies    schedule 17.06.2020
comment
Согласно developer.android.com/guide/navigation/ новейшим версия панели навигации перекрывает верхнюю панель, и значок гамбургера или стрелка назад не должны быть видны.   -  person ich5003    schedule 17.06.2020
comment
@ RenéSpies, все правильно, все идентификаторы совпадают   -  person Waldmann    schedule 17.06.2020
comment
Слушайте внимательно, что говорит мужчина на видео. Вы используете @+id/, что неверно в вашем случае.   -  person René Jörg Spies    schedule 17.06.2020
comment
@ ich5003 Вопрос по иконкам на панели инструментов, когда меню ящика скрыто.   -  person Waldmann    schedule 17.06.2020
comment
@ RenéSpies, я просто удалил плюсы и не повлияло. Тем не менее значок гамбургера превращается в значок стрелки.   -  person Waldmann    schedule 17.06.2020


Ответы (1)


Согласно документации по верхней панели приложений навигации:

NavigationUI использует объект AppBarConfiguration для управления поведением кнопки навигации в верхнем левом углу области отображения вашего приложения. Поведение кнопки навигации меняется в зависимости от того, находится ли пользователь в пункте назначения верхнего уровня.

Назначение верхнего уровня - это корневой пункт или пункт назначения самого высокого уровня в наборе иерархически связанных пунктов назначения. В местах назначения верхнего уровня не отображается кнопка «Вверх» на верхней панели приложения, поскольку нет места назначения более высокого уровня. По умолчанию начальная точка назначения вашего приложения является единственной конечной точкой верхнего уровня.

Когда пользователь находится в пункте назначения верхнего уровня, кнопка навигации становится значком выдвижного ящика, если в пункте назначения используется DrawerLayout. Если место назначения не использует DrawerLayout, кнопка навигации скрыта. Когда пользователь находится в любом другом пункте назначения, кнопка навигации отображается как кнопка вверх.

Поэтому, если вы хотите, чтобы значок ящика отображался на всех значках верхнего уровня, вам нужно создать AppBarConfiguration, в котором перечислены эти пункты назначения, и использовать его при вызове setupWithNavController():

val appBarConfiguration = AppBarConfiguration(
    setOf(R.id.bottom_nav_proposals, R.id.bottom_nav_vehicles, R.id.bottom_nav_drivers), drawerLayout)
toolbar.setupWithNavController(navController, appBarConfiguration)

В документации по панели навигации на той же странице также конкретно указывается, что вы не следует использовать ActionBarDrawerToggle при использовании навигации. Вы должны удалить весь этот код.

person ianhanniballake    schedule 17.06.2020
comment
Большое спасибо! Сработал оберег. Я изучу упомянутую вами документацию. - person Waldmann; 18.06.2020