У пользовательского навигационного ящика Android странная задняя часть

У меня есть приложение, похожее на Android Studios Navigation Drawer Activity:

В моем действии используются компоненты навигации по архитектуре Android и панель навигации для навигации между различными фрагментами. Поскольку панель навигации довольно нестандартная, я не могу использовать обычное представление навигации, но использую настраиваемый фрагмент, на котором размещается LinearLayout. Каждый элемент в этом LinearLayout имеет onClickListener, который сводится к

navController.navigate(R.id.myCorrespondingFragment)

Пока так все работает нормально. Проблема начинается при возвращении назад:

Представим, что я перехожу из Home-Fragment A - ›B -› C, а затем возвращаюсь назад.

Пример Android Studios работает правильно: C - ›A -› закрыть

Моя реализация не работает: она просто выталкивает бэкстэк C - ›B -› A - ›close

Как мне это исправить?


Уменьшенный основной макет:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout  android:id="@+id/drawerLayout" >

    <LinearLayout android:orientation="vertical" >

            <androidx.appcompat.widget.Toolbar  android:id="@+id/toolbar" />
        
        <fragment
            android:id="@+id/container"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:defaultNavHost="true"
            app:navGraph="@navigation/nav_graph"
            />

    </LinearLayout>

    <fragment
        android:name="com.company.drawer.DrawerFragment"
        android:layout_gravity="start"
        />

</androidx.drawerlayout.widget.DrawerLayout>

График навигации:

<?xml version="1.0" encoding="utf-8"?>
<navigation
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/navigation_graph"
    app:startDestination="@id/doorFragment"
    >

    <fragment
        android:id="@+id/doorFragment"
        android:name="com.company.door.DoorFragment"
        android:label="@string/shared_empty"
        />

    <fragment
        android:id="@+id/historyFragment"
        android:name="com.company.history.HistoryFragment"
        android:label="@string/history"
        />

    <fragment
        android:id="@+id/settingsFragment"
        android:name="com.company.settings.SettingsFragment"
        android:label="@string/settings"
        />
</navigation>

Вся навигация, связанная с моим основным действием onCreate:

setSupportActionBar(toolbar)     
val navController = (supportFragmentManager.findFragmentById(R.id.container) as NavHostFragment).navController
toolbar.setupWithNavController(navController, AppBarConfiguration(
    listOf(R.id.doorFragment, R.id.historyFragment, R.id.settingsFragment)
    , drawerLayout
))

person m.reiter    schedule 07.04.2021    source источник


Ответы (1)


Вы можете попробовать вот так

<fragment
android:id="@+id/fragmentA"
android:name="com.package.FragmentA"
android:label="Fragment A">

<action
    android:id="@+id/action_fragmentA_to_fragmentB"
    app:destination="@id/fragmentB"
    app:popUpTo="@id/fragmentB"
    app:popUpToInclusive="true / false" />
</fragment>
person raj kavadia    schedule 07.04.2021
comment
... но это будет означать, что мне нужно добавить действие из каждого фрагмента в каждый фрагмент? - person m.reiter; 07.04.2021