У меня есть эта простая навигационная настройка, состоящая из 3 экранов:
Screen 1 -> Screen 2 -> Screen 3
|______________________^
Экран 2 - это форма регистрации, которую можно пропустить, если ее заполнить один раз.
У меня странная проблема с График навигации Jetpack, на котором при переходе с экрана 2 -> 3 приложение зависало из-за активированного экрана 1 (!) onViewCreated()
и направления навигации не найдены:
java.lang.IllegalArgumentException: navigation destination
com.example.app:id/action_screen1_to_screen3 is unknown to this NavController
Мой график навигации:
<fragment
android:id="@+id/screen1"
android:name="Screen1Fragment"
android:label="Screen 1"
tools:layout="@layout/fragment_screen_1">
<action
android:id="@+id/action_screen1_to_screen2"
app:destination="@id/screen2"
app:launchSingleTop="false"/>
<action
android:id="@+id/action_screen1_to_screen3"
app:destination="@id/screen3"
app:launchSingleTop="false"
app:popUpTo="@id/screen1"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/screen2"
android:name="Screen2Fragment"
android:label="Screen 2"
tools:layout="@layout/fragment_screen_2">
<action
android:id="@+id/action_screen2_to_screen3"
app:destination="@id/screen3"
app:launchSingleTop="false"
app:popUpTo="@id/screen2"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/screen3"
android:name="Screen3Fragment"
android:label="Screen 3"
tools:layout="@layout/fragment_screen_3">
</fragment>
Я использую автоматически сгенерированные NavDirections, поэтому не нужно использовать неправильный идентификатор ресурса.
Код навигации:
// Screen 1
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
if (isLoggedIn) {
view?.findNavController()
?.navigate(Screen1FragmentDirections.screen1ToSelectScreen3())
} else {
signInButton.setOnClickListener {
val action =
Screen1FragmentDirections.screen1ToScreen2()
view?.findNavController()?.navigate(action)
}
}
}
// Screen 2
view?.findNavController()?.navigate(Screen2FragmentDirections.screen2ToScreen3())
Мой импорт Gradle:
def nav_version = "2.3.0-alpha04"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
Любая помощь приветствуется, спасибо!