Согласно принципам навигации первое место назначения в вашем приложении должно быть экраном, который ваши пользователи обычно видят при запуске приложения после регистрации / входа в систему или любой другой условной навигации, я назвал это место назначения homeFragment.
Следуя этому принципу и прочитав сообщение на условная навигация от Марии Ноймайер У меня возникли некоторые проблемы с панелью инструментов и обратной навигацией при прохождении потоков условной навигации.
Я разрабатываю приложение, используя одно действие с ConstraintLayout, панелью инструментов и NavHostFragment:
<android.support.constraint.ConstraintLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.activities.NavigationTestActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
/>
</android.support.constraint.ConstraintLayout>
Основной график выглядит следующим образом с домашним пунктом назначения в качестве начального пункта назначения, связанным с действием над фрагментом детали (это действие запускается кнопкой) и условной навигацией, реализованной с использованием вложенного графа:
Я назвал этот вложенный граф welcomeGraph, и он включает экраны для входа в систему или регистрации, вы можете увидеть его здесь:
Добро пожаловать в вложенный график
В homeFragment onResume я проверяю, был ли выполнен вход в систему / регистрация (определяется фиктивным логическим значением, хранящимся в sharedPrefs), и если нет, я запускаю приветственный вложенный граф для регистрации / входа в систему.
В пункте назначения входа у меня есть кнопка «Завершено», которая устанавливает фиктивное логическое значение в sharedPrefs как true и запускает действие popToWelcomeGraph (включительно), которое должно закрыть весь вложенный граф и вернуть меня к homeFragment (это работает).
ПРОБЛЕМА - Проблема с панелью инструментов во вложенном графе:
Поскольку график приветствия запускается сразу после того, как пользователь попадает в приложение, на панели инструментов не должно отображаться стрелка назад / вверх в первом месте назначения этого вложенного графика, вместо этого должно быть ощущение, что это был первый экран в приложении, и нажатие назад должен выйти из приложения.
ВОПРОС: Можно ли изменить панель инструментов здесь, чтобы имитировать первый экран во вложенном графике, который является первым экраном в приложении до завершения входа в систему / регистрации? Будет ли это плохой практикой?