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
.
po...@gmail.com <po...@gmail.com> #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>
il...@google.com <il...@google.com> #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 :)
po...@gmail.com <po...@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.
il...@google.com <il...@google.com>
jb...@google.com <jb...@google.com> #6
Here is the sample project that reproduces the issue:
po...@gmail.com <po...@gmail.com> #7
While the project in
cl...@google.com <cl...@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
ap...@google.com <ap...@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.
cl...@google.com <cl...@google.com> #10
This has been fixed internally and will be available in Navigation 2.6.0-alpha05
pr...@google.com <pr...@google.com> #11
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-common:2.6.0-alpha05
androidx.navigation:navigation-runtime:2.6.0-alpha05
Description
Component used: Navigation / NavigationUI Version used: 2.5.2 Devices/Android versions reproduced on: OnePlus 8T / Android 12
I'm using a menu resource file which is bound to a BottomNavigationView. Also I'm setting up the navigation like so
NavigationUI.setupWithNavController(bottomNavigationView, navController, false)
which means I'm using the experimental version of this API.I don't want the state of each menu item to be saved since I want to come back to the respective start destination if a
BottomNavigationView
item gets reselected. So regardless of how deep I got in a navigation graph a reselection of the same item takes you back to the start destination.I'm using a navGraph which consists of several nested navGraphs like so:
The
one_navigation
could look like this:It works pretty good so far, the point is when I click the first BottomNavigationView's menu item
N times
I got the destinationN+1 times
on my back stack. If I wanted to leave the app by triggering the system's back navigation I'd have to do itN+1 times
.So I actually expect the startDestination to only exist once on the back stack regardless of how often I click the respective menu item setup with the above mentioned API.