Navigation is a framework for navigating between 'destinations' within an Android application that provides a consistent API whether destinations are implemented as Fragments, Activities, or other components.
Latest Update | Current Stable Release | Next Release Candidate | Beta Release | Alpha Release |
---|---|---|---|---|
December 4, 2019 | 2.1.0 | 2.2.0-rc03 | - | - |
Declaring dependencies
To add a dependency on Navigation, you must add the Google Maven repository to your project. Read Google's Maven repository for more information.
Add the dependencies for the artifacts you need in the build.gradle
file for
your app or module:
dependencies { def nav_version = "2.1.0" // Java language implementation implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Kotlin implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" }
Safe Args
To add Safe Args
to your project, include the following classpath
in your top level build.gradle
file:
buildscript { repositories { google() } dependencies { def nav_version = "2.1.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
You must also apply one of two available plugins.
To generate Java language code suitable for Java or mixed Java and Kotlin modules, add
this line to your app or module's build.gradle
file:
apply plugin: "androidx.navigation.safeargs"
Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:
apply plugin: "androidx.navigation.safeargs.kotlin"
You must have android.useAndroidX=true
in your
gradle.properties
file as per
Migrating to AndroidX.
For information on using Kotlin extensions, see the ktx documentation.
For more information about dependencies, see Add Build Dependencies.
Version 2.2.0
Version 2.2.0-rc03
December 4, 2019
androidx.navigation:navigation-*:2.2.0-rc03
is released. Version 2.2.0-rc03 contains these commits.
Bug fixes
- Fixed an issue with deep link parsing when using query parameters and an argument as the last part of the path that prevented more than one character of the final path argument from being parsed. (b/144554689)
- Fixed an issue with deep link parsing where optional parameters would receive
"@null"
instead ofnull
. (b/141613546) NavHostFragment
now correctly restores the graph after a configuration change when used withFragmentContainerView
. (b/143752103)
Dependency changes
- Navigation now depends on Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
, and Fragment1.2.0-rc03
where appropriate.
Version 2.2.0-rc02
November 7, 2019
androidx.navigation:navigation-*:2.2.0-rc02
is released. Version 2.2.0-rc02 contains these commits.
Dependency changes
- Navigation now depends on androidx.lifecycle
2.2.0-rc02
.
Version 2.2.0-rc01
October 23, 2019
androidx.navigation:navigation-*:2.2.0-rc01
is released with no changes since 2.2.0-beta01
. Version 2.2.0-rc01 contains these commits.
Version 2.2.0-beta01
October 9, 2019
androidx.navigation:navigation-*:2.2.0-beta01
is released. Version 2.2.0-beta01 contains these commits.
New features
NavDestination
and its subclasses now overridetoString()
to provide more helpful information when debugging. (b/141264986)
Behavior changes
- Extra query parameters are now ignored when matching deep links rather than causing the match to fail. (b/141482822)
Bug fixes
- Fixed an issue where arguments in a deep link’s path would be ignored if query parameters were also specified. (b/141505755)
- The
navArgs()
Kotlin extension onActivity
now has a better error message when there are no extras. (b/141408999) - Safe Args generated
Directions
Java classes now contain default values. (b/141099045) - Safe Args generated
Args
Java classes now contain default values. (b/140123727) - When using a
Toolbar
,NavigationUI
no longer animates the text change when moving between two top level destinations. (b/140848160)
Version 2.2.0-alpha03
September 18, 2019
androidx.navigation:navigation-*:2.2.0-alpha03
is released. Version 2.2.0-alpha03 contains these commits.
Behavior changes
- Calling
setViewModelStore()
after callingsetGraph
now results in anIllegalStateException
. This should always be set by theNavHost
as part of the initial setup to ensure that allNavBackStackEntry
instances have a consistent storage forViewModel
instances. (aosp/1111821)
Bug fixes
- Fixed a
ConcurrentModificationException
when usingViewModel
instances attached to multiple different navigation graph scopedViewModelStore
instances. (aosp/1112257)
Version 2.2.0-alpha02
September 5, 2019
androidx.navigation:navigation-*:2.2.0-alpha02
is released. The commits included in this version can be found here.
New features
- Deep links with query parameters now support reordered query parameters; arguments that have a default value or are nullable are now optional when matching deep links. (b/133273839)
- You can now call
NavController.getBackStackEntry()
, passing in the ID of a destination or navigation graph on the back stack. The returnedNavBackStackEntry
provides a Navigation-drivenLifecycleOwner
,ViewModelStoreOwner
(the same returned byNavController.getViewModelStoreOwner()
), andSavedStateRegistryOwner
, in addition to providing the arguments used to start that destination. (aosp/1101691, aosp/1101710)
Bug fixes
- Fixed an issue where adding a
NavHostFragment
toViewPager2
failed with anIllegalArgumentException
. (b/133640271) NavInflater
now avoids callinggetResourceName()
unnecessarily, speeding up inflation time by up to 40%. (b/139213740)
Version 2.2.0-alpha01
August 7, 2019
androidx.navigation:navigation-*:2.2.0-alpha01
is released. The commits included in this version can be found here.
New features
SavedStateViewModelFactory
is now the default factory used when usingby navGraphViewModels()
or theViewModelProvider
constructor with aViewModelStoreOwner
returned byNavController.getViewModelStoreOwner()
. (b/135716331)
API changes
- From Navigation
2.1.0-rc01
: The deprecatedgetViewModelStore()
API onNavController
introduced in2.1.0-alpha02
has been removed. (aosp/1091021)
Bug fixes
NavHostFragment
now usesFragmentContainerView
, fixing animation z-ordering issues and window insets dispatching to Fragments. (b/137310379)
Version 2.1.0
Version 2.1.0
September 5, 2019
androidx.navigation:navigation-*:2.1.0
is released. The commits included in this version can be found here.
Important changes since 2.0.0
- Scoping ViewModels to a navigation graph: You can now create ViewModels that are scoped at the navigation graph level using the
by navGraphViewModels()
property delegate for Kotlin users using the-ktx
libraries or by using thegetViewModelStoreOwner()
API added toNavController
. See Share UI-related data between destinations for more information. - Dialog destinations: You can now create
<dialog>
destinations that will show aDialogFragment
when younavigate
to them.NavHostFragment
supports dialog destinations by default. See Create a destination from a DialogFragment for more information. - Navigating by Uri: You can now
navigate
using aUri
, which uses the<deepLink>
you’ve added to a destination to navigate there. See Navigate using Uri for more information. - NavHostController: APIs used specifically for constructing a custom
NavHost
have been moved toNavHostController
, allowing implementations to connect theirNavController
to the hostingLifecycleOwner
,OnBackPressedDispatcher
, andViewModelStore
.
Version 2.1.0-rc01
August 7, 2019
androidx.navigation:navigation-*:2.1.0-rc01
is released. The commits included in this version can be found here.
API changes
- The deprecated
getViewModelStore()
API onNavController
introduced in2.1.0-alpha02
has been removed. (aosp/1091021)
Version 2.1.0-beta02
July 19, 2019
androidx.navigation:*:2.1.0-beta02
is released. The commits included in this version can be found here.
Bug fixes
- Removed unintentional jacoco dependency that was introduced in
2.1.0-beta01
. (b/137782950)
Version 2.1.0-beta01
July 17, 2019
androidx.navigation:*:2.1.0-beta01
is released. The commits included in this version can be found here.
New features
NavigationUI
now animates the removal of the Up button when usingsetupWithNavController()
with aToolbar
orCollapsingToolbarLayout
. (b/131403621)
Bug fixes
- Fixed a timing issue when using multiple NavHostFragments with the same container with
findNavController()
. (b/136021571)
Version 2.1.0-alpha06
July 2, 2019
androidx.navigation:*:2.1.0-alpha06
is released. The commits included in this version can be found here.
New features
- The
app:navGraph
attribute used by NavHostFragment has now been moved to thenavigation-runtime
artifact. Custom navigators that can be added via XML should use this attribute to gain integration with the Navigation Editor’s Host panel. (b/133880955)
API changes
- The
getViewModelStore()
API onNavController
has been deprecated in favor of the newgetViewModelStoreOwner()
method that returns aViewModelStoreOwner
. (aosp/987010) - The implementation of floating window destinations, such as
<dialog>
destinations, has been generalized into a marker interface,FloatingWindow
, that all<dialog>
destinations now implement. NavigationUI methods for interacting with the top app bar now ignoreFloatingWindow
destinations. (b/133600763)
Behavior changes
- Navigation now correctly keeps its state in sync with what is seen on the screen when using a
<dialog>
destination. As a consequence, Navigation now automatically pops<dialog>
destinations when you navigate to a non-dialog and non-activity destination, such as a<fragment>
destination. (b/134089818)
Bug fixes
- Navigation now suppresses the animation that occurs when recreating the activity when handling a deep link, fixing a visual flash. (b/130362979)
- Fixed a bug where the Navigation back stack would be out of sync when popping a Fragment as the initial fragment is being added. (b/133832218)
Version 2.1.0-alpha05
June 5, 2019
androidx.navigation:*:2.1.0-alpha05
is released. The commits included in this version can be found here.
API changes
- Host related APIs on
NavController
have been renamed and moved to a new subclass ofNavController
,NavHostController
. (aosp/966091) - The
NavController
setHostOnBackPressedDispatcherOwner()
method has been replaced withNavHostController
’ssetOnBackPressedDispatcher()
method and now requires that you callsetLifecycleOwner()
prior to calling it. (aosp/965409) NavHostController
now contains aenableOnBackPressed(boolean)
method that replaces theNavHostOnBackPressedManager
class that was previously returned bysetHostOnBackPressedDispatcherOwner()
. (aosp/966091)
Bug fixes
- Fixed an issue where the back stack was not correct after navigating by URI. (b/132509387)
- Deep links automatically handled by NavController now only trigger once. (b/132754763)
Version 2.1.0-alpha04
May 16, 2019
androidx.navigation:*:2.1.0-alpha04
is released. The commits included in this version can be found here.
Bug fixes
NavHostFragment
correctly respectsapp:defaultNavHost
when intercepting the system Back button events, fixing a regression in Navigation2.1.0-alpha03
. b/132077777DialogFragmentNavigator
now correctly handlespopBackStack()
andnavigateUp()
operations. b/132576764- Fixed an
IllegalStateException: unknown destination during restore
issue when repeatedly navigating between nested graphs. b/131733658
Version 2.1.0-alpha03
May 7, 2019
androidx.navigation:*:2.1.0-alpha03
is released. The commits included in this version can be found here.
Known Issues
- NavHostFragment continues to intercept the system Back button despite using
app:defaultNavHost="false"
b/132077777
New features
- You can now create
<dialog>
destinations that will show aDialogFragment
when younavigate
to them.NavHostFragment
supports dialog destinations by default. b/80267254 - In addition to calling
navigate
with a resource id or aNavDirections
instance, you can now navigate via aUri
, which uses the<deepLink>
you’ve added to a destination to navigate to the correct destination. b/110412864
Behavior changes
- The default animations provided by NavigationUI have been sped up from 400ms to 220ms to match the default animation speed of activities and fragments. b/130055522
API changes
- The
createFragmentNavigator()
method ofNavHostFragment
has been deprecated and its functionality moved to the newonCreateNavController()
method to make it more clear that this is the correct entry point of adding custom Navigators when subclassingNavHostFragment
. b/122802849 - A
hasDeepLink()
method has been added toNavDestination
to allow you to check if a givenUri
can be handled by that destination or, in the case of aNavGraph
, any destination in the navigation graph. b/117437718
Bug fixes
- Default arguments are now correctly passed to
OnDestinationChangedListener
instances. b/130630686 NavHostFragment
now intercepts system Back events using theOnBackPressedDispatcher
, fixing an issue when doing conditional navigation in Fragment lifecycle methods upon returning to a Fragment. b/111598096- For Safe Args, an
android:defaultValue=”@null”
with an unspecifiedapp:argType
is now properly inferred as astring
argument. b/129629192
Version 2.1.0-alpha02
April 3, 2019
androidx.navigation:*:2.1.0-alpha02
is released. The commits included in this version can be found here.
New features
- You can now create ViewModels that are scoped at a navigation graph level via the
by navGraphViewModels()
property delegate for Kotlin users or by using thegetViewModelStore()
API added toNavController
. b/111614463
API changes
- You can now add an
app:targetPackage
to an<activity>
destination to limit the matching package name. It supportsapp:targetPackage="${applicationId}"
for restricting the package to your own application id. b/110975456
Bug fixes
- The
android:name
for<activity>
destinations is no longer parsed into a Class at inflation time, preventing ClassNotFoundExceptions when using dynamic features. b/124538597
Version 2.1.0-alpha01
March 19, 2019
This is the first alpha release of Navigation 2.1.0
.
Dependency changes
- Navigation now depends on
androidx.core:core:1.0.1
andandroidx.fragment:fragment:1.1.0-alpha05
. This release also removes the dependency onandroidx.legacy:legacy-support-core-utils:1.0.0
. b/128632612
API Changes
- A new
Navigation.createNavigateOnClickListener(NavDirections)
method has been added as an alternative to creating a click listener with a resource ID and Bundle. b/127631752 FragmentNavigator.instantiateFragment
is now deprecated. The default implementation now usesFragmentFactory
to instantiate Fragments. b/119054429
Bug Fixes
- Navigation no longer sends a null
Bundle
when there are arguments attached to a destination, fixing an issue when usingandroid:defaultValue="@null"
. b/128531879 - Safe Args now depends on KotlinPoet 1.1.0, fixing an issue with extremely long package names. b/123654948
Version 2.0.0
Version 2.0.0
March 14, 2019
Navigation 2.0.0
is released with no changes from 2.0.0-rc02
.
Version 2.0.0-rc02
March 6, 2019
Navigation 2.0.0-rc02 provides new artifacts with the androidx.navigation
group ID and changes its dependencies to the AndroidX equivalents.
The behavior of 2.0.0-rc02 is identical to behavior to Navigation 1.0.0-rc02 and no changes to your code should be required to update from 1.0.0-rc02 besides updating your dependencies to match the new dependencies.
Your project must have migrated to AndroidX to use 2.X releases of Navigation. Navigation 1.0 stable will be the last release using the Support Library dependencies; all future development beyond 1.0 will be based on AndroidX and build upon the 2.0 stable release.
Pre-AndroidX Dependencies
For the pre-AndroidX versions of Navigation, include these dependencies:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
For Safe args, add the
following classpath in your top level build.gradle
file
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Version 1.0.0
Version 1.0.0
March 14, 2019
Navigation 1.0.0
is released with no changes from 1.0.0-rc02
.
Version 1.0.0-rc02
February 26, 2019
This is the second release candidate for Navigation's 1.0.0 stable release. This release contains a number of bug fixes.
Bug Fixes
- Fixed an issue where
popBackStack()
would be ignored if the root graph did not have an ID b/126251695 navigateUp()
now correctly handles navigating back to your app's task when called after handling a deep link withoutFLAG_ACTIVITY_NEW_TASK
b/126082008- Fixed an issue with
ActivityNavigator.applyPopAnimationsToPendingTransition
not applying the correct pop exit animation b/126237567 - Kotlin code generated by Safe Args now properly escapes Kotlin keywords
such as
in
andfun
in the package name associated with theR
class. b/126020455
Version 1.0.0-rc01
February 21, 2019
This is a release candidate for Navigation's 1.0.0 stable release. This release contains one bug fix.
Bug Fixes
- Fixed an issue when using Fragments and
singleTop
navigation operations b/124294805
Version 1.0.0-beta02
February 12, 2019
This release includes a number of minor improvements and important bug fixes.
New Features
- You can now use
0
as anandroid:defaultValue
forreference
arguments. b/124248602
Behavior changes
- Exact deep link matches are now prioritized over deep links with
.*
or argument matches. b/123969518
Bug Fixes
popBackStack()
andnavigateUp
now correctly returnfalse
when popping the last destination on the back stack, fixing a regression introduced in1.0.0-beta01
. b/123933201- Navigation now correctly sets the
ClassLoader
during restoration of saved instance state, avoiding issues when using custom classes inNavigator
saved state or in arguments sent to aNavDestination
. b/123893858 - Safe Args generated NavArgs classes no longer crash when restoring a
Parcelable[]
argument from saved instance state. b/123963545 - Safe Args now properly cleans up unnecessary generated Kotlin classes. b/124120883
Version 1.0.0-beta01
February 4, 2019
This is the first beta release of Navigation; moving forward, the Navigation API is expected to stay stable until the next version unless there is a critical problem. This release contains some bug fixes and behavior changes.
Behavior changes
- Navigation now ensures that argument default values are treated identically
at runtime and through Safe Args. As a consequence, only arguments with an
app:argType="reference"
can have a default value point to another resource (for example,@color/colorPrimary
). Attempting to use a reference default value with a differentapp:argType
will result in an exception when parsing the navigation XML. b/123551990 - Safe Args now depends on Android Gradle Plugin 3.3.0 aosp/888413
- Safe Args now depends on Kotlin 1.3.20 aosp/888414
Bug Fixes
- Safe Args can now be used in library and feature modules on all versions of the Android Gradle Plugin. b/121304903
- Fixed a regression that would cause a single
popBackStack()
operation to pop all copies of a destination off the top of the back stack, rather than just a single destination at a time. b/123552990 - Fixed an issue where the
FragmentNavigator
state would desynchronize with theNavController
's state, causing anIllegalStateException
when attempting to restore the back stack. b/123803044 - Fixed an issue where the
NavigationUI
handled back arrow would not appear when using ProGuard with obfuscation. b/123449431 - The code generated by Safe Args now properly handles using an
app:argType
pointing to a static inner class in the format.OuterClass$InnerClass
. b/123736741 - The Java code generated by Safe Args now properly handles global actions and deeply nested destinations. b/123347762
Version 1.0.0-alpha11
January 23, 2019
This is a hotfix release of 1.0.0-alpha10
that fixes an issue with Safe Args.
Bug Fixes
- Fixes an issue where Safe Args would fail to import the Directions class associated with global actions. b/123307342
Version 1.0.0-alpha10
January 23, 2019
Known Issues
- Safe Args fails to import the Directions class associated with global actions. b/123307342
This release contains breaking API changes; please see the Breaking Changes section below.
New Features
- Kotlin users can now use the
by navArgs()
property delegate to lazily get a reference to a Safe Args generatedNavArgs
class in anActivity
orFragment
. b/122603367 - Safe Args now allows you to generate Kotlin code by applying the
androidx.navigation.safeargs.kotlin
plugin. The Kotlin code is built specifically for Kotlin only modules, using default arguments and immutable classes over the builder pattern that is still available via the previousandroidx.navigation.safeargs
plugin. b/110263087
Behavior Changes
- Matching deep links are now biased towards the deep link that has the most matching arguments. b/118393029
- Calling
setGraph()
on aNavController
will now reset the back stack. b/111450672 - Unknown deep links no longer throw an
IllegalStateException
, but are ignored, fixing issues with nested or multipleNavHostFragment
s. b/121340440
Breaking Changes
- The
NavOptions.applyPopAnimationsToPendingTransition()
method for applying pop animations to an Activity has been moved toActivityNavigator
. b/122413117 - Safe Args now avoids duplicating identical classes for actions without
arguments. The return type for no argument methods in generated NavDirections
classes is now
NavDirections
. b/123233147 - Safe Args generated Directions classes no longer have a public constructor - you should only be interacting with the generated static methods. b/123031660
- Safe Args generated
NavDirections
classes no longer have a public constructor - they should only be generated via the static methods in the generated Directions classes. b/122963206 - The returned
Bundle
fromNavDirections
'getArguments()
is now marked as@NonNull
rather than@Nullable
. b/123243957
Bug Fixes
NavDeepLinkBuilder
now correctly handles multiple simultaneousPendingIntent
s to the same destination by using the arguments you pass in to determine the uniqueness. b/120042732NavController
now correctly handlespopBackStack()
operations when using a nestedNavHostFragment
or other child Fragments with a back stack. b/122770335NavigationUI
now correctly sets the content description of the Up button. b/120395362- Safe Args generated Directions classes now correctly handle global actions that have the same id as an action on a destination. b/122962504
- Safe Args generated
NavDirections
classes now correctly have equalhashCode()
values whenequals()
would return true. b/123043662 FragmentNavigator
now throws a better error message if you attempt to do customFragmentTransactions
on theNavHostFragment
'sFragmentManager
. You should always usegetChildFragmentManager()
. b/112927148
Version 1.0.0-alpha09
December 18, 2018
This release contains breaking API changes; please see the Breaking Changes section below.
We have chosen not to continue development of the
android.arch.navigation:navigation-testing
artifact. While it has proven
helpful for internal testing of NavController
, we strongly recommend
alternate testing strategies, such as mocking the NavController
instance
in order to verify that the correct navigate()
calls are being done. This
approach is discussed in detail in the
Single Activity talk at AndroidDevSummit 2018
and we'll be working on additional documentation specifically around testing
with Navigation.
New Features
MenuItem
s withmenuCategory="secondary"
will no longer pop the back stack when used withNavigationUI
methods. b/120104424AppBarConfiguration
now allows you to set a fallbackOnNavigateUpListener
instance which will be called whennavController.navigateUp()
returnsfalse
. b/79993862 b/120690961
Breaking Changes
- When using an
<argument>
with anargType="reference"
, Navigation no longer parses the reference, instead providing the raw resource ID itself. b/111736515 onNavDestinationSelected()
now pops back to the start destination of your navigation graph by default, making them consistent with thesetup
methods. AddmenuCategory="secondary"
to yourMenuItem
to avoid popping the back stack. aosp/852869- The
fromBundle()
methods of generatedArgs
classes now take a non-nullBundle
instead of a nullableBundle
aosp/845616
Bug Fixes
- Arguments are now properly parsed from deep links as the correct
argType
instead of always as strings b/110273284 - Navigation now correctly exports its public resources b/121059552
- Safe Args is now compatible with Android Gradle Plugin 3.4 Canary 4 and higher b/119662045
Version 1.0.0-alpha08
December 6, 2018
This release contains breaking API changes; please see the Breaking Changes section below.
New Features
- Destination labels, when used with
NavigationUI
methods, will now automatically replace{argName}
instances in yourandroid:label
with the correct argument b/80267266 - Navigation now depends on Support Library 28.0.0 b/120293333
Breaking Changes
OnNavigatedListener
has been renamed toOnDestinationChangedListener
b/118670572OnDestinationChangedListener
now also passes theBundle
of arguments aosp/837142- The
app:clearTask
andapp:launchDocument
attributes and their associated methods have been removed. Useapp:popUpTo
with the root of your graph to remove all destinations from your back stack. b/119628354 ActivityNavigator.Extras
now uses aBuilder
pattern and adds the ability to set anyIntent.FLAG_ACTIVITY_
flags aosp/828140NavController.onHandleDeepLink
has been renamed tohandleDeepLink
aosp/836063- Many classes and methods not meant for subclassing, such as
NavOptions
,NavInflater
,NavDeepLinkBuilder
, andAppBarConfiguration
, have been madefinal
aosp/835681 - The deprecated
NavHostFragment.setGraph()
method has been removed aosp/835684 - The deprecated
NavigationUI.navigateUp(DrawerLayout, NavController)
method has been removed. aosp/835684 - Fragment creation has been moved to
FragmentNavigator
, making it easier to delegate Fragment creation to aFragmentFactory
. b/119054429 - The constructor for
NavGraphNavigator
no longer takes aContext
aosp/835340 - NavigatorProvider is now
a class, rather than an interface. The
NavigatorProvider
returned bygetNavigatorProvider()
has not changed its functionality. aosp/830660 NavDestination.navigate()
has been removed. Callnavigate()
on theNavigator
instead. aosp/830663- Significant refactoring of
Navigator
, removing the need forOnNavigatorNavigatedListener
and instead havingnavigate
return theNavDestination
that was navigated to. Navigator
instances can no longer send pop events to theNavController
. Consider using aOnBackPressedCallback
to intercept back button presses and callnavController.popBackStack()
. aosp/833716
Bug Fixes
popUpTo
now works consistently when the destination is a<navigation>
element b/116831650- Fixed a number of bugs that resulted in an
IllegalArgumentException
when using nested graphs b/118713731 b/113611083 b/113346925 b/113305559 - The
dataPattern
attribute of<activity>
destinations will now populate arguments from non-String arguments by callingtoString()
b/120161365
Safe Args
- Safe Args supports Serializable objects, including Enum values. Enum types
can set a default value by using the enum literal without the class name
(e.g.
app:defaultValue="READ"
) b/111316353 - Safe Args supports arrays of all supported types b/111487504
- Safe Args now ignores subfolders of resource directories b/117893516
- Safe Args adds
@Override
annotations where appropriate b/117145301
Version 1.0.0-alpha07
October 29, 2018
New Features
- A new AppBarConfiguration class allows you to customize which destinations are considered top-level destinations. See the updated documentation for details. b/117333663
- You can now pass arguments to the start destination of your graph b/110300470
- Deep links now support custom schemes with periods, hyphens, and plus signs. b/112806402
Breaking Changes
- The
navigation-testing-ktx
module has been folded into thenavigation-testing artifact
and will no longer be published. - The
navigation-testing
artifact now has a dependency on the Kotlin standard library. The API has been changed to be more consistent with Kotlin conventions, but you can continue to use it for tests written in Java. - Metadata manifest registered navigation graphs are no longer supported. b/118355937
- Actions can no longer be attached to <activity> destinations. aosp/785539
Bug Fixes
- Deep links now correctly parse query parameters. b/110057514
- Activity destinations now correctly apply all enter and exit animations. b/117145284
- Fixed crash that occurs after configuration changes when using custom Navigators. b/110763345
Safe Args
- Safe args now have a fixed dependency on Android Gradle Plugin 3.2.1. b/113167627
- Directions can now be generated for inner classes. b/117407555
- Fixed an issue with generating Directions to an <include> graph. b/116542123
Version 1.0.0-alpha06
September 20, 2018
New Features
- Shared Element Transitions for Fragment and Activity destinations are now supported b/79665225. For more information, see Implement navigation with the Navigation Architecture Component
- Selecting an item in
NavigationView
will now close any containing bottom sheet b/112158843
API Changes
- Breaking Change: The Navigator
navigate()
method now takes aNavigator.Extras
parameter. - NavController's
getGraph()
method is nowNonNull
b/112243286
Bug Fixes
NavigationUI.setupWithNavController()
no longer leaks views if used with views from individual destinations b/111961977- Navigator
onSaveState()
is now only called once b/112627079
Safe Args
- Navigation destination Directions classes now extend their parent's Directions class if it exists b/79871405
- Directions and Args classes now have a useful
toString()
implementation b/111843389
Version 1.0.0-alpha05
August 10, 2018
Bug Fixes
- Fix a bug which cause incorrect backstack behavior. b/111907708
- Fix a bug in
equals()
of Generated Args classes. b/111450897 - Fix a build failure in Safe Args. b/109409713
- Fix a conversion from resource identifiers to java names b/111602491
- Fix error messages about nullability in Safe Args plugin.
- Add missing nullability annotations.
Version 1.0.0-alpha04
July 19, 2018
Navigation 1.0.0-alpha04
and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.
API / Behavior Changes
- NavHostFragment will always set the current Fragment as the primary navigation fragment, ensuring that child fragment managers are popped before the outer NavController is popped b/111345778
Safe Args
- Breaking Change:
app:type
has been changed toapp:argType
to avoid conflicts with other libraries such as ConstraintLayout 2.0.0-alpha1 b/111110548 - Error messages from Safe Args are now clickable b/111534438
- Args classes now confirms that
NonNull
attributes are actually not null b/111451769 - Additional
NonNull
annotations have been added to NavDirections and Args generated classes b/111455455 b/111455456
Bug Fixes
- Fixed an issue with the system back button after deep linking to a fragment destination b/111515685
Version 1.0.0-alpha03
July 12, 2018
Navigation 1.0.0-alpha03
and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.
API / Behavior Changes
- A NavigationUI.setupWithNavController method for Toolbar has been added b/109868820
- A NavigationUI.setupWithNavController method for CollapsingToolbarLayout has been added b/110887183
- popBackStack() now returns false when the back stack is empty or when the given destination ID is not in the back stack b/110893637
- FragmentNavigator now ignores navigation operations after FragmentManager has saved state, avoiding “Can not perform this action after onSaveInstanceState” exceptions b/110987825
Safe Args
- Breaking Change: Non-alphanumeric characters in action and argument names will be replaced by camel casing in the respective NavDirections method names
- E.g.
DemoController.index
will becomesetDemoControllerIndex
b/79995048 - E.g.
action_show_settings
will becomeactionShowSettings
b/79642240
- E.g.
- Breaking Change: Arguments are now considered non-null by default. To allow null values on string and parcelable arguments, add
app:nullable="true"
b/79642307 - You can now use
app:type="long"
with defaultValues in the form of “123L” b/79563966 - Parcelable arguments are now supported, using a fully qualified class name for
app:type
. The only default value supported is"@null"
b/79563966 - Args classes now implement
equals()
andhashCode()
b/79642246 - The Safe Args plugin can now be applied to library projects b/80036553
- The Safe Args plugin can now be applied to feature projects b/110011752
Bug Fixes
- Fixed issues when navigating during Fragment lifecycle methods b/109916080
- Fixed issues when navigating through nested graphs multiple times b/110178671
- Fixed issues when using
setPopUpTo
with the first destination in the graph b/109909461 - Fixed issue where all
app:defaultValue
values were being passed as Strings b/110710788 - aapt2 bundled with Android Gradle Plugin 3.2 Beta 01 now adds keep rules for every
android:name
attribute in Navigation XML files b/79874119 - Fixed memory leak when replacing the default FragmentNavigator b/110900142
Version 1.0.0-alpha02
June 7, 2018
Behavior Changes
FragmentNavigator
now usessetReorderingAllowed(true)
. b/109826220Navigation now URLDecodes arguments parsed from deep links URLs. b/79982454
Bug Fixes
Fixed an
IllegalStateException
when calling navigate from Fragment lifecycle methods. b/79632233Navigation now depends on Support Library 27.1.1 to fix flickering when using animations. b/80160903
Fixed an
IllegalArgumentException
when using defaultNavHost="true" as a child fragment. b/79656847Fixed a
StackOverflowError
when using NavDeepLinkBuilder. b/109653065Fixed an
IllegalArgumentException
when navigating back to a nested graph. b/80453447Fixed an issue with overlapping Fragments when using
launchSingleTop
. b/79407969Navigation now builds the correct synthetic back stack for nested graphs. b/79734195
NavigationUI will now highlight the correct item when using a nested graph as a
MenuItem
. b/109675998
API Changes
The
clearTask
attribute for actions and the associated API inNavOptions
has been deprecated. b/80338878The
launchDocument
attribute for actions and the associated API inNavOptions
has been deprecated. b/109806636
Version 1.0.0-alpha01
May 8, 2018
Navigation provides a framework for building in-app
navigation. This initial release is 1.0.0-alpha01
.