У меня есть приложение, похожее на 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
))