Google 致力于为黑人社区推动种族平等。查看具体举措

NavDestination

open class NavDestination
kotlin.Any
   ↳ androidx.navigation.NavDestination

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 actions 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.

Summary

Nested classes

This optional annotation allows tooling to offer auto-complete for the android:name attribute.

Public constructors
<init>(@NonNull navigator: Navigator<out NavDestination!>)

NavDestinations should be created via Navigator#createDestination.

<init>(@NonNull navigatorName: String)

NavDestinations should be created via Navigator#createDestination.

Public methods
Unit
addArgument(@NonNull argumentName: String, @NonNull argument: NavArgument)

Sets an argument type for an argument name

Unit
addDeepLink(@NonNull uriPattern: String)

Add a deep link to this destination.

Unit
addDeepLink(@NonNull navDeepLink: NavDeepLink)

Add a deep link to this destination.

NavAction?
getAction(@IdRes id: Int)

Returns the destination ID for a given action.

MutableMap<String!, NavArgument!>

Get the arguments supported by this destination.

Int

Returns the destination's unique ID.

CharSequence?

Gets the descriptive label of this destination.

String

Returns the name associated with this destination's Navigator.

NavGraph?

Gets the NavGraph that contains this destination.

open Boolean
hasDeepLink(@NonNull deepLink: Uri)

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

open Boolean
hasDeepLink(@NonNull deepLinkRequest: NavDeepLinkRequest)

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

open Unit
onInflate(@NonNull context: Context, @NonNull attrs: AttributeSet)

Called when inflating a destination from a resource.

Unit
putAction(@IdRes actionId: Int, @IdRes destId: Int)

Sets a destination ID for an action ID.

Unit
putAction(@IdRes actionId: Int, @NonNull action: NavAction)

Sets a destination ID for an action ID.

Unit
removeAction(@IdRes actionId: Int)

Unsets the destination ID for an action ID.

Unit
removeArgument(@NonNull argumentName: String)

Unsets the argument type for an argument name.

Unit
setId(@IdRes id: Int)

Sets the destination's unique ID.

Unit
setLabel(@Nullable label: CharSequence?)

Sets the descriptive label of this destination.

open String

Protected methods
open static Class<out C>
parseClassFromName(@NonNull context: Context, @NonNull name: String, @NonNull expectedClassType: Class<out C>)

Parse the class associated with this destination from a raw name, generally extracted from the android:name attribute added to the destination's XML.

Public constructors

<init>

NavDestination(@NonNull navigator: Navigator<out NavDestination!>)

NavDestinations should be created via Navigator#createDestination.

This constructor requires that the given Navigator has a Navigator.Name annotation.

<init>

NavDestination(@NonNull navigatorName: String)

NavDestinations should be created via Navigator#createDestination.

Public methods

addArgument

fun addArgument(
    @NonNull argumentName: String,
    @NonNull argument: NavArgument
): Unit

Sets an argument type for an argument name

Parameters
argumentName String: argument object to associate with destination
fun addDeepLink(@NonNull uriPattern: String): Unit

Add a deep link to this destination. Matching Uris sent to NavController#handleDeepLink(Intent) or NavController#navigate(Uri) 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 Bundle 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
uriPattern String: The uri pattern to add as a deep link
fun addDeepLink(@NonNull navDeepLink: NavDeepLink): Unit

Add a deep link to this destination. Uris that match the given NavDeepLink uri sent to NavController#handleDeepLink(Intent) or NavController#navigate(NavDeepLinkRequest) 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 Bundle 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#getPa