Status Update
Comments
il...@google.com <il...@google.com> #2
Can you include a sample project that reproduces your issue?
Note that if you want to just return to your main graph (which I assume launched your login_nav_graph
), you would want to leave out the app:destination="@id/main_nav_graph"
line entirely as that will create a second instance of your main_nav_graph
.
jo...@olavstoppen.no <jo...@olavstoppen.no> #3
Thank you! While working on a minimal repro and keeping your comment in mind, I solved my problem.
My problem was partly that I had an app:destination
in my pop action, but also that the action leading to login_nav_graph
was popping:
<action
android:id="@+id/logout"
app:destination="@id/login_nav_graph"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true" />
Here is a working sample of what I wanted to achieve:
main_nav_graph.xml
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_nav_graph"
app:startDestination="@id/mainFragment">
<fragment
android:id="@+id/mainFragment"
android:name="app.reitan.navigationrepro.MainFragment"
android:label="fragment_main"
tools:layout="@layout/fragment_main">
<action
android:id="@+id/to_login_nav_graph"
app:destination="@id/login_nav_graph"/>
</fragment>
<include app:graph="@navigation/login_nav_graph" />
</navigation>
login_nav_graph.xml
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/login_nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="app.reitan.navigationrepro.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login">
<action
android:id="@+id/pop_login_nav_graph"
app:popUpTo="@id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
</navigation>
jo...@olavstoppen.no <jo...@olavstoppen.no> #4
Even though the error was probably in my code, this is still a change of behavior, as this used to work fine in 2.3.0. Just so you know :)
jo...@gmail.com <jo...@gmail.com> #5
Trying to recreate this issue in a sample project as well, but I am seeing the same thing. However I am navigating by id instead of action.
an...@gmail.com <an...@gmail.com> #6
Here is the sample project that reproduces the issue:
il...@google.com <il...@google.com> #7
While the project in
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 91744799f42b2b5bc42c727a17cd3618eb232c01
Author: Ian Lake <ilake@google.com>
Date: Tue Jun 08 19:02:25 2021
Ensure that NavGraphNavigator stack order remains correct
When popping the root graph, the root graph
needs to be added to the front of the
hierarchy to ensure that the
navigatorBackStack for the NavGraphNavigator
is rebuilt in the correct order.
This ensures that future popBackStack() calls
will find that the NavController's back stack
ordering matches the NavigatorState of the
NavGraphNavigator, avoiding an
IllegalStateException.
Test: new NavControllerTest test passes
BUG: 190265699
Relnote: "Fixed an IllegalStateException when
calling popBackStack() after previously popping
the root graph of the NavController."
Change-Id: I2a330acdd339aece36455aa0da37d0609767552c
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/androidTest/res/navigation/nav_multiple_navigation.xml
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
il...@google.com <il...@google.com> #9
We've fixed the underlying issue (related to popping the root graph, then navigating to another nested graph) internally and it will be available in Navigation 2.4.0-alpha03.
Description
Component used: Navigation
Version used: 2.4.0-beta02
Devices/Android versions reproduced on: Pixel 3, Huawei P20 Pro, emulator, Android 11, 12
I have a main graph and a login graph. When login is done, I want to pop the entire login graph, and return to the main graph.
This action in the login graph used to work in version 2.3.0, but throws an exception in 2.4.0-beta01/2:
The stack trace: