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
.
sa...@gmail.com <sa...@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 :)
ki...@google.com <ki...@google.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.
ki...@google.com <ki...@google.com> #6
Here is the sample project that reproduces the issue:
an...@google.com <an...@google.com> #7
While the project in
an...@google.com <an...@google.com>
ki...@google.com <ki...@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
sa...@gmail.com <sa...@gmail.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.
sa...@gmail.com <sa...@gmail.com> #10
Toolbar appBar = findViewById(R.id.toolbar);
setSupportActionBar(appBar);
// Hook up the app bar with the navigation
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController);
navController.addOnDestinationChangedListener((controller, destination, arguments) -> TransitionManager.beginDelayedTransition(appBar));
Thanks for your help!
ki...@google.com <ki...@google.com> #11
il...@google.com <il...@google.com> #12
ap...@google.com <ap...@google.com> #13
Branch: androidx-master-dev
commit e28e8678478c7c04b55886e7071750cbdea89121
Author: jbwoods <jbwoods@google.com>
Date: Thu Jun 27 14:32:13 2019
Animate Toolbar Changes in NavigationUI
When animateLayoutChanges is set on a Toolbar, there are errors in how
the text within the toolbar is displayed if it has an arrow. The text
leaves a big space on destinations with no arrow.
This change checks so see if the icon will be null and then uses a
TransitionManager to animate the toolbar text into the proper position.
We only animate when the icon is going to disappear. If we were animate
when the icon is appearing, the new icon and text appear stacked when
the animation begins.
Test: Tested visually in app
BUG: 131403621
Change-Id: I97ff213bdeb6da3282287d9b572f33c74cf9e9e7
M navigation/navigation-ui/build.gradle
M navigation/navigation-ui/src/main/java/androidx/navigation/ui/CollapsingToolbarOnDestinationChangedListener.java
M navigation/navigation-ui/src/main/java/androidx/navigation/ui/ToolbarOnDestinationChangedListener.java
Description
Version used: 2.0.0
Devices/Android versions reproduced on: all
My navigation destinations have different title bars:
* The top-level bar has no menu/back icon
* Each destination has its own title text
When I navigate between destinations, the Navigation library updates the app bar icon and title text, but no animation occurs. As a result, the app bar change is startling, whereas the content change is smooth. For the user, this makes the app feel like it has a bug or something.
Can you add a feature to animate changes to the app bar? Some animations I'd like to see are:
* If the icon is being added or removed, slide the title text from its original position to its new position
* Otherwise, either cross-fade the title or maybe match the destination transition animation
Thanks