public class NavDestination
Known indirect subclasses

NavDestination represents one node within an overall navigation graph.

Each destination is associated with a Navigator which knows how to navigate to this particular destination.

Destinations declare a set of putAction that they support. These actions form a navigation API for the destination; the same actions declared on different destinations that fill similar roles allow application code to navigate based on semantic intent.

Each destination has a set of arguments that will be applied when navigating to that destination. Any default values for those arguments can be overridden at the time of navigation.

NavDestinations should be created via Navigator.createDestination.

Summary

Public methods

final void

addArgument(@NonNull String argumentName, @NonNull NavArgument argument)

Sets an argument type for an argument name

final void

Add a deep link to this destination.

final void

addDeepLink(@NonNull String uriPattern)

Add a deep link to this destination.

boolean

equals(Object other)

final String

fillInLabel(@NonNull Context context, Bundle bundle)

Parses a dynamic label containing arguments into a String.

final NavAction

getAction(@IdRes int id)

Returns the NavAction for the given action ID.

final @NonNull Map<@NonNull String, @NonNull NavArgument>

The arguments supported by this destination.

@NonNull String
static final @NonNull Sequence<@NonNull NavDestination>

Provides a sequence of the NavDestination's hierarchy.

final @IdRes int

The destination's unique ID.

final CharSequence

The descriptive label of this destination.

final @NonNull String

The name associated with this destination's Navigator.

final NavGraph

Gets the NavGraph that contains this destination.

final String

The destination's unique route.

boolean

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink .

boolean

Checks the given NavDeepLinkRequest, and determines whether it matches a NavDeepLink added to the destination by a call to addDeepLink.

boolean

hasDeepLink(@NonNull Uri deepLink)

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink .

static final boolean

<T extends Object> hasRoute(@NonNull NavDestination receiver)

Checks if the NavDestination's route was generated from T

static final boolean

<T extends Object> hasRoute(
    @NonNull NavDestination receiver,
    @NonNull KClass<@NonNull T> route
)

Checks if the NavDestination's route was generated from T

int
void

Called when inflating a destination from a resource.

final void

putAction(@IdRes int actionId, @NonNull NavAction action)

Sets the NavAction destination for an action ID.

final void

putAction(@IdRes int actionId, @IdRes int destId)

Creates a NavAction for the given destId and associates it with the actionId.

final void

removeAction(@IdRes int actionId)

Unsets the NavAction for an action ID.

final void

removeArgument(@NonNull String argumentName)

Unsets the argument type for an argument name.

final void

setId(int value)

The destination's unique ID.

final void

The descriptive label of this destination.

final void

Gets the NavGraph that contains this destination.

final void

The destination's unique route.

@NonNull String

Public constructors

Public methods

addDeepLink

public final void addDeepLink(@NonNull NavDeepLink navDeepLink)

Add a deep link to this destination. Uris that match the given NavDeepLink uri sent to NavController.handleDeepLink or NavController.navigate will trigger navigating to this destination.

In addition to a direct Uri match, the following features are supported:

Uris without a scheme are assumed as http and https. For example, www.example.com will match http://www.example.com and https://www.example.com. Placeholders in the form of {placeholder_name} matches 1 or more characters. The String value of the placeholder will be available in the arguments SavedState with a key of the same name. For example, http://www.example.com/users/{id} will match http://www.example.com/users/4. The .* wildcard can be used to match 0 or more characters.

These Uris can be declared in your navigation XML files by adding one or more <deepLink app:uri="uriPattern" /> elements as a child to your destination.

Custom actions and mimetypes are also supported by NavDeepLink and can be declared in your navigation XML files by adding <app:action="android.intent.action.SOME_ACTION" /> or <app:mimetype="type/subtype" /> as part of your deepLink declaration.

Deep link Uris, actions, and mimetypes added in navigation XML files will automatically replace instances of ${applicationId} with the applicationId of your app. Programmatically added deep links should use Context.getPackageName directly when constructing the uriPattern.

When matching deep links for calls to NavController.handleDeepLink or NavController.navigate the order of precedence is as follows: the deep link with the most matching arguments will be chosen, followed by the deep link with a matching action, followed by the best matching mimeType (e.i. when matching mimeType image/jpg: image/ * > *\/jpg > *\/ *).

addDeepLink

public final void addDeepLink(@NonNull String uriPattern)

Add a deep link to this destination. Matching Uris sent to NavController.handleDeepLink or NavController.navigate will trigger navigating to this destination.

In addition to a direct Uri match, the following features are supported:

  • Uris without a scheme are assumed as http and https. For example, www.example.com will match http://www.example.com and https://www.example.com.

  • Placeholders in the form of {placeholder_name} matches 1 or more characters. The parsed value of the placeholder will be available in the arguments SavedState with a key of the same name. For example, http://www.example.com/users/{id} will match http://www.example.com/users/4.

  • The .* wildcard can be used to match 0 or more characters.

These Uris can be declared in your navigation XML files by adding one or more <deepLink app:uri="uriPattern" /> elements as a child to your destination.

Deep links added in navigation XML files will automatically replace instances of ${applicationId} with the applicationId of your app. Programmatically added deep links should use Context.getPackageName directly when constructing the uriPattern.

Parameters
@NonNull String uriPattern

The uri pattern to add as a deep link

fillInLabel

public final String fillInLabel(@NonNull Context context, Bundle bundle)

Parses a dynamic label containing arguments into a String.

Supports String Resource arguments by parsing R.string values of ReferenceType arguments found in android:label into their String values.

Returns null if label is null.

Returns the original label if the label was a static string.

Parameters
@NonNull Context context

Context used to resolve a resource's name

Bundle bundle

SavedState containing the arguments used in the label

Returns
String

The parsed string or null if the label is null

Throws
IllegalArgumentException

if an argument provided in the label cannot be found in the bundle, or if the label contains a string template but the bundle is null

getAction

public final NavAction getAction(@IdRes int id)

Returns the NavAction for the given action ID. This will recursively check the getParent of this destination if the action destination is not found in this destination.

Parameters
@IdRes int id

action ID to fetch

Returns
NavAction

the NavAction mapped to the given action id, or null if one has not been set

getId

public final @IdRes int getId()

The destination's unique ID. This should be an ID resource generated by the Android resource system.

If using safe args, setting this manually will override the ID that was set based on route from KClass.

getRoute

public final String getRoute()

The destination's unique route. Setting this will also update the id of the destinations so custom destination ids should only be set after setting the route.

Returns
String

this destination's route, or null if no route is set

hasDeepLink

public boolean hasDeepLink(@NonNull NavUri deepLink)

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink . It returns true if the deep link is a valid match, and false otherwise.

This should be called prior to NavController.navigate to ensure the deep link can be navigated to.

Parameters
@NonNull NavUri deepLink

to the destination reachable from the current NavGraph

Returns
boolean

True if the deepLink exists for the destination.

hasDeepLink

public boolean hasDeepLink(@NonNull Uri deepLink)

Checks the given deep link NavUri, and determines whether it matches a Uri pattern added to the destination by a call to addDeepLink . It returns true if the deep link is a valid match, and false otherwise.

This should be called prior to NavController.navigate to ensure the deep link can be navigated to.

Parameters
@NonNull Uri deepLink

to the destination reachable from the current NavGraph

Returns
boolean

True if the deepLink exists for the destination.

hasRoute

public static final boolean <T extends Object> hasRoute(@NonNull NavDestination receiver)

Checks if the NavDestination's route was generated from T

Returns true if equal, false otherwise.

Parameters
<T extends Object>

the route from KClass

setId

public final void setId(int value)

The destination's unique ID. This should be an ID resource generated by the Android resource system.

If using safe args, setting this manually will override the ID that was set based on route from KClass.

setRoute

public final void setRoute(String value)

The destination's unique route. Setting this will also update the id of the destinations so custom destination ids should only be set after setting the route.

Returns
void

this destination's route, or null if no route is set

Protected methods

parseClassFromName

protected static final @NonNull Class<C> <C extends Object> parseClassFromName(
    @NonNull Context context,
    @NonNull String name,
    @NonNull Class<C> expectedClassType
)

Parse the class associated with this destination from a raw name, generally extracted from the android:name attribute added to the destination's XML. This should be the class providing the visual representation of the destination that the user sees after navigating to this destination.

This method does name -> Class caching and should be strongly preferred over doing your own parsing if your Navigator supports the android:name attribute to give consistent behavior across all Navigators.

Parameters
@NonNull Context context

Context providing the package name for use with relative class names and the ClassLoader

@NonNull String name

Absolute or relative class name. Null names will be ignored.

@NonNull Class<C> expectedClassType

The expected class type

Throws
IllegalArgumentException

if the class is not found in the provided Context's ClassLoader or if the class is not of the expected type

Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Last updated 2026-02-19 UTC.