Status Update
Comments
il...@google.com <il...@google.com> #2
Oh I forgot to mention that I thought it might be connected to this issue:
po...@gmail.com <po...@gmail.com> #3
Please provide a minimal sample project along with the minimal steps to recreate the issue in the project.
il...@google.com <il...@google.com> #4
Sorry for the delay. I got a working example here:
I poked into it a little bit and it seems to be connected to
Steps to reproduce:
- Navigate from Second Fragment to Child nav graph (with non-nullable parameters).
- Navigate to Third fragment using SafeArgs and the app crashes.
Crash log:
Process: cz.dels.issues, PID: 1743
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Long
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:352)
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:342)
at androidx.navigation.NavArgument.verify(NavArgument.kt:76)
at androidx.navigation.NavDestination.addInDefaultArgs(NavDestination.kt:502)
at androidx.navigation.NavController.addEntryToBackStack(NavController.kt:1865)
at androidx.navigation.NavController.addEntryToBackStack$default(NavController.kt:1813)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1721)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1719)
at androidx.navigation.NavController$NavControllerNavigatorState.push(NavController.kt:287)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:246)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:162)
at androidx.navigation.NavController.navigateInternal(NavController.kt:260)
at androidx.navigation.NavController.navigate(NavController.kt:1719)
at androidx.navigation.NavController.navigate(NavController.kt:1545)
at androidx.navigation.NavController.navigate(NavController.kt:1472)
at androidx.navigation.NavController.navigate(NavController.kt:1930)
at cz.dels.issues.SecondFragment.onViewCreated$lambda-0(SecondFragment.kt:38)
at cz.dels.issues.SecondFragment.$r8$lambda$XDYnOS_cYrafiNQ5rcCu1WCn0IE(Unknown Source:0)
at cz.dels.issues.SecondFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
Note: If in step 2 SaveArgs is not used then navigation works correctly. More information is here:
po...@gmail.com <po...@gmail.com> #5
Ups a typo: Navigate from Second First Fragment to Child nav graph (with non-nullable parameters).
Note: sorry for the spam but I am not able to edit my own comment.
il...@google.com <il...@google.com>
jb...@google.com <jb...@google.com> #6
This has been fixed and will be available in navigation 2.6.0-alpha08
po...@gmail.com <po...@gmail.com> #7
Branch: androidx-main
commit 6b358154b794a0456b089ac8e548bfb830dd6c22
Author: Clara Fok <clarafok@google.com>
Date: Tue Mar 14 17:56:12 2023
Fix missing non-nullable arg when rebuilding hierarchy
When navigating with NavDirections, args is populated with an empty bundle. This causes issue when we rebuild parent hierarchy while adding a new entry to NavBackStack. If the Entry being rebuilt contains a non-nullalbe arg, i.e. Long, this empty bundle will cause an exception.
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 249988437
Change-Id: I5c8ce739ad9a3428c8a8de13eae391bfff0db5df
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
cl...@google.com <cl...@google.com>
ap...@google.com <ap...@google.com> #8
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-runtime:2.6.0-alpha08
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit f433d5458950a632900f8a2685ce6eab27272f8c
Author: Clara Fok <clarafok@google.com>
Date: Thu Dec 01 15:52:28 2022
Fix BottomNavView launchSingleTop with NavGraph
NavController previously did not apply launchSingleTop when user repeatedly navigates to the starting destination of a Menu when this starting destination is a NavGraph. This results in the destination being added mulitple times to backstack.
Now NavController checks if the destination is a NavGraph and if so, adds all destinations from the node to its final startDestination (i.e. nested nav graphs) to singleTop.
NavController backstack and Navigator backstacks entries are replaced accordingly upon singleTop navigations.
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 253256629
Relnote: singleTop now works with NavGraph such that if the top destination of the backstack is a NavGraph's startDestination, all destinations starting from original destination to its startDestination will only be added to the top of the backstack once.
Change-Id: Id4bea16aff3dd776826fc6d746475e293eb64b0e
M navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
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.