NavController  |  API reference  |  Android Developers


Known indirect subclasses

NavController manages app navigation within a NavHost.

Apps will generally obtain a controller directly from a host, or by using one of the utility methods on the Navigation class rather than create a controller directly.

Navigation flows and destinations are determined by the navigation graph owned by the controller. These graphs are typically navInflater from an Android resource, but, like views, they can also be constructed or combined programmatically or for the case of dynamic navigation structure. (For example, if the navigation structure of the application is determined by live data obtained' from a remote server.)

Summary

Public functions

open Unit

Adds an OnDestinationChangedListener to this controller to receive a callback whenever the currentDestination or its arguments change.

Cmn

android

inline Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Cmn

android

Boolean

Clears any saved state associated with destinationId that was previously saved via popBackStack when using a saveState value of true.

android

Boolean

@MainThread
<T : Any> clearBackStack(route: KClass<T>)

Clears any saved state associated with KClass route that was previously saved via popBackStack when using a saveState value of true.

Cmn

android

Boolean

@MainThread
<T : Any> clearBackStack(route: T)

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Cmn

android

Boolean

Clears any saved state associated with route that was previously saved via popBackStack when using a saveState value of true.

Cmn

android

open NavDeepLinkBuilder

Create a deep link to a destination within this NavController.

android

inline NavBackStackEntry

Gets the topmost NavBackStackEntry for a route from KClass.

Cmn

android

open NavBackStackEntry

getBackStackEntry(destinationId: @IdRes Int)

Gets the topmost NavBackStackEntry for a destination id.

android

NavBackStackEntry

<T : Any> getBackStackEntry(route: KClass<T>)

Gets the topmost NavBackStackEntry for a route from KClass.

Cmn

android

NavBackStackEntry

<T : Any> getBackStackEntry(route: T)

Gets the topmost NavBackStackEntry for a route from an Object.

Cmn

android

NavBackStackEntry

Gets the topmost NavBackStackEntry for a route.

Cmn

android

open ViewModelStoreOwner

Gets the ViewModelStoreOwner for a NavGraph.

android

open Boolean

Checks the given Intent for a Navigation deep link and navigates to the deep link if present.

android

Boolean

Checks the given NavDeepLinkRequest for a Navigation deep link and navigates to the destination if present.

Cmn

android

open Unit

Navigate to a destination via the given deep link Uri.

Cmn

open Unit

@MainThread
navigate(deepLink: Uri)

Navigate to a destination via the given deep link Uri.

android

open Unit

Navigate via the given NavDirections

android

open Unit

Navigate to a destination via the given NavDeepLinkRequest.

Cmn

android

open Unit

Navigate to a destination from the current navigation graph.

android

open Unit

@MainThread
navigate(deepLink: NavUri, navOptions: NavOptions?)

Navigate to a destination via the given deep link Uri.

Cmn

open Unit

@MainThread
navigate(deepLink: Uri, navOptions: NavOptions?)

Navigate to a destination via the given deep link Uri.

android

open Unit

@MainThread
navigate(directions: NavDirections, navOptions: NavOptions?)

Navigate via the given NavDirections

android

open Unit

@MainThread
navigate(directions: NavDirections, navigatorExtras: Navigator.Extras)

Navigate via the given NavDirections

android

open Unit

Navigate to a destination via the given NavDeepLinkRequest.

Cmn

android

open Unit

@MainThread
navigate(resId: @IdRes Int, args: Bundle?)

Navigate to a destination from the current navigation graph.

android

Unit

@MainThread
<T : Any> navigate(route: T, builder: NavOptionsBuilder.() -> Unit)

Navigate to a route from an Object in the current NavGraph.

Cmn

android

Unit

@MainThread
navigate(route: String, builder: NavOptionsBuilder.() -> Unit)

Navigate to a route in the current NavGraph.

Cmn

android

open Unit

@MainThread
navigate(
    deepLink: NavUri,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination via the given deep link Uri.

Cmn

open Unit

@MainThread
navigate(
    deepLink: Uri,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination via the given deep link Uri.

android

open Unit

@MainThread
navigate(
    request: NavDeepLinkRequest,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination via the given NavDeepLinkRequest.

Cmn

android

open Unit

@MainThread
navigate(resId: @IdRes Int, args: Bundle?, navOptions: NavOptions?)

Navigate to a destination from the current navigation graph.

android

Unit

@MainThread
<T : Any> navigate(
    route: T,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a route from an Object in the current NavGraph.

Cmn

android

Unit

@MainThread
navigate(
    route: String,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a route in the current NavGraph.

Cmn

android

open Unit

@MainThread
navigate(
    resId: @IdRes Int,
    args: Bundle?,
    navOptions: NavOptions?,
    navigatorExtras: Navigator.Extras?
)

Navigate to a destination from the current navigation graph.

android

open Boolean

Attempts to navigate up in the navigation hierarchy.

Cmn

android

open Boolean

Attempts to pop the controller's back stack.

Cmn

android

open Boolean

@MainThread
popBackStack(destinationId: @IdRes Int, inclusive: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

android

inline Boolean

@MainThread
<T : Any> popBackStack(inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

Cmn

android

open Boolean

@MainThread
popBackStack(
    destinationId: @IdRes Int,
    inclusive: Boolean,
    saveState: Boolean
)

Attempts to pop the controller's back stack back to a specific destination.

android

Boolean

@MainThread
<T : Any> popBackStack(
    route: KClass<T>,
    inclusive: Boolean,
    saveState: Boolean
)

Attempts to pop the controller's back stack back to a specific destination.

Cmn

android

Boolean

@MainThread
<T : Any> popBackStack(route: T, inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

Cmn

android

Boolean

@MainThread
popBackStack(route: String, inclusive: Boolean, saveState: Boolean)

Attempts to pop the controller's back stack back to a specific destination.

Cmn

android

open Unit

Removes an OnDestinationChangedListener from this controller.

Cmn

android

open Unit

Restores all navigation controller state from a SavedState.

android

open Unit

Restores all navigation controller state from a SavedState.

Cmn

open SavedState?

Saves all navigation controller state to a SavedState.

Cmn

android

open Unit

Sets the navigation graph to the specified resource.

android

open Unit

@MainThread
@CallSuper
setGraph(graph: NavGraph, startDestinationArgs: Bundle?)

Sets the navigation graph to the specified graph.

android

open Unit

@MainThread
@CallSuper
setGraph(graph: NavGraph, startDestinationArgs: SavedState?)

Sets the navigation graph to the specified graph.

Cmn

open Unit

@MainThread
@CallSuper
setGraph(graphResId: @NavigationRes Int, startDestinationArgs: Bundle?)

Sets the navigation graph to the specified resource.

android

Extension functions

inline NavGraph

NavController.createGraph(
    id: @IdRes Int,
    startDestination: @IdRes Int,
    builder: NavGraphBuilder.() -> Unit
)

This function is deprecated. Use routes to create your NavGraph instead

android

inline NavGraph

NavController.createGraph(
    id: @IdRes Int,
    startDestination: @IdRes Int,
    builder: DynamicNavGraphBuilder.() -> Unit
)

This function is deprecated. Use routes to create your dynamic NavGraph instead

android

inline NavGraph

NavController.createGraph(
    startDestination: String,
    route: String?,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

Cmn

inline NavGraph

NavController.createGraph(
    startDestination: String,
    route: String?,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

android

inline NavGraph

NavController.createGraph(
    startDestination: Any,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

Cmn

inline NavGraph

NavController.createGraph(
    startDestination: Any,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

android

inline NavGraph

NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: NavGraphBuilder.() -> Unit
)

Construct a new NavGraph

Cmn

inline NavGraph

NavController.createGraph(
    startDestination: KClass<*>,
    route: KClass<*>?,
    typeMap: Map<KTypeNavType<*>>,
    builder: DynamicNavGraphBuilder.() -> Unit
)

Construct a new androidx.navigation.NavGraph that supports dynamic navigation destinations

android

Boolean

Handles the Up button by delegating its behavior to the given NavController.

android

Boolean

Handles the Up button by delegating its behavior to the given NavController.

android

State<NavBackStackEntry?>

Gets the current navigation back stack entry as a MutableState.

Cmn

State<NavBackStackEntry?>

Gets the current navigation back stack entry as a State.

android

Constants

Public companion functions

Public constructors

Public functions

clearBackStack

@MainThread
inline fun <T : Any> clearBackStack(): Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Parameters
<T : Any>

The route from the KClass of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with T was cleared.

clearBackStack

@MainThread
fun <T : Any> clearBackStack(route: KClass<T>): Boolean

Clears any saved state associated with KClass route that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: KClass<T>

The route from the KClass of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with route was cleared.

clearBackStack

@MainThread
fun <T : Any> clearBackStack(route: T): Boolean

Clears any saved state associated with KClass T that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: T

The route from an Object of the destination previously used with popBackStack with a saveStatevalue of true. The target NavDestination must have been created with route from KClass.

Returns
Boolean

true if the saved state of the stack associated with T was cleared.

clearBackStack

@MainThread
fun clearBackStack(route: String): Boolean

Clears any saved state associated with route that was previously saved via popBackStack when using a saveState value of true.

Parameters
route: String

The route of the destination previously used with popBackStack with a saveState value of true. May contain filled in arguments as long as it is exact match with route used with popBackStack.

Returns
Boolean

true if the saved state of the stack associated with route was cleared.

handleDeepLink

@MainThread
open fun handleDeepLink(intent: Intent?): Boolean

Checks the given Intent for a Navigation deep link and navigates to the deep link if present. This is called automatically for you the first time you set the graph if you've passed in an Activity as the context when constructing this NavController, but should be manually called if your Activity receives new Intents in Activity.onNewIntent.

The types of Intents that are supported include:

Intents created by NavDeepLinkBuilder or createDeepLink. This assumes that the current graph shares the same hierarchy to get to the deep linked destination as when the deep link was constructed. Intents that include a data Uri. This Uri will be checked against the Uri patterns in the NavDeepLinks added via NavDestination.addDeepLink.

The navigation graph should be set before calling this method.

Parameters
intent: Intent?

The Intent that may contain a valid deep link

Returns
Boolean

True if the navigation controller found a valid deep link and navigated to it.

handleDeepLink

@MainThread
fun handleDeepLink(request: NavDeepLinkRequest): Boolean

Checks the given NavDeepLinkRequest for a Navigation deep link and navigates to the destination if present.

The navigation graph should be set before calling this method.

Parameters
request: NavDeepLinkRequest

The request that contains a valid deep link, an action or a mimeType.

Returns
Boolean

True if the navigation controller found a valid deep link and navigated to it.

@MainThread
open fun navigate(resId: @IdRes Int): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

@MainThread
open fun navigate(resId: @IdRes Int, args: Bundle?): Unit

Navigate to a destination from the current navigation graph. This supports both navigating via an action and directly navigating to a destination.

Parameters
resId: @IdRes Int

an action id or a destination id to navigate to

args: Bundle?

arguments to pass to the destination

@MainThread
fun <T : Any> navigate(route: T, builder: NavOptionsBuilder.() -> Unit): Unit

Navigate to a route from an Object in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

The target NavDestination must have been created with route from a KClass

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

@MainThread
fun <T : Any> navigate(
    route: T,
    navOptions: NavOptions? = null,
    navigatorExtras: Navigator.Extras? = null
): Unit

Navigate to a route from an Object in the current NavGraph. If an invalid route is given, an IllegalArgumentException will be thrown.

The target NavDestination must have been created with route from a KClass

If given NavOptions pass in NavOptions.restoreState true, any args passed here as part of the route will be overridden by the restored args.

Parameters
route: T

route from an Object for the destination

navOptions: NavOptions? = null

special options for this navigation operation

navigatorExtras: Navigator.Extras? = null

extras to pass to the Navigator

@MainThread
open fun navigateUp(): Boolean

Attempts to navigate up in the navigation hierarchy. Suitable for when the user presses the "Up" button marked with a left (or start)-facing arrow in the upper left (or starting) corner of the app UI.

The intended behavior of Up differs from Back when the user did not reach the current destination from the application's own task. e.g. if the user is viewing a document or link in the current app in an activity hosted on another app's task where the user clicked the link. In this case the current activity (determined by the context used to create this NavController) will be Activity.finish and the user will be taken to an appropriate destination in this app on its own task.

Returns
Boolean

true if navigation was successful, false otherwise

popBackStack

@MainThread
open fun popBackStack(): Boolean

Attempts to pop the controller's back stack. Analogous to when the user presses the system android.view.KeyEvent.KEYCODE_BACK button when the associated navigation host has focus.

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
open fun popBackStack(destinationId: @IdRes Int, inclusive: Boolean): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
destinationId: @IdRes Int

The topmost destination to retain

inclusive: Boolean

Whether the given destination should also be popped.

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
inline fun <T : Any> popBackStack(inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
<T : Any>

The topmost destination to retain with route from a KClass. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and T should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same T (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
open fun popBackStack(
    destinationId: @IdRes Int,
    inclusive: Boolean,
    saveState: Boolean
): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
destinationId: @IdRes Int

The topmost destination to retain

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean

Whether the back stack and the state of all destinations between the current destination and the destinationId should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same destinationId (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
fun <T : Any> popBackStack(
    route: KClass<T>,
    inclusive: Boolean,
    saveState: Boolean = false
): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: KClass<T>

The topmost destination to retain with route from a KClass. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same T (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
fun <T : Any> popBackStack(route: T, inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: T

The topmost destination to retain with route from an Object. The target NavDestination must have been created with route from KClass.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and the route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same route (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

popBackStack

@MainThread
fun popBackStack(route: String, inclusive: Boolean, saveState: Boolean = false): Boolean

Attempts to pop the controller's back stack back to a specific destination.

Parameters
route: String

The topmost destination to retain. May contain filled in arguments as long as it is exact match with route used to navigate.

inclusive: Boolean

Whether the given destination should also be popped.

saveState: Boolean = false

Whether the back stack and the state of all destinations between the current destination and the route should be saved for later restoration via NavOptions.Builder.setRestoreState or the restoreState attribute using the same route (note: this matching ID is true whether inclusive is true or false).

Returns
Boolean

true if the stack was popped at least once and the user has been navigated to another destination, false otherwise

restoreState

@CallSuper
open fun restoreState(navState: Bundle?): Unit

Restores all navigation controller state from a SavedState. This should be called before any call to setGraph.

State may be saved to a SavedState by calling saveState. Restoring controller state is the responsibility of a NavHost.

Parameters
navState: Bundle?

SavedState to restore

restoreState

@CallSuper
open fun restoreState(navState: SavedState?): Unit

Restores all navigation controller state from a SavedState. This should be called before any call to setGraph.

State may be saved to a SavedState by calling saveState. Restoring controller state is the responsibility of a NavHost.

Parameters
navState: SavedState?

SavedState to restore

saveState

@CallSuper
open fun saveState(): SavedState?

Saves all navigation controller state to a SavedState.

State may be restored from a SavedState returned from this method by calling restoreState. Saving controller state is the responsibility of a NavHost.

Returns
SavedState?

saved state for this controller

Public properties

graph

open var graphNavGraph

The topmost navigation graph associated with this NavController.

When this is set any current navigation graph data (including back stack) will be replaced.

open val navigatorProviderNavigatorProvider

The NavController's NavigatorProvider. All Navigators used to construct the navigation graph for this nav controller should be added to this navigator provider before the graph is constructed.

This can only be set before the graph is set via setGraph().

Generally, the Navigators are set for you by the NavHost hosting this NavController and you do not need to manually interact with the navigator provider.

visibleEntries

val visibleEntriesStateFlow<List<NavBackStackEntry>>

A StateFlow that will emit the currently visible NavBackStackEntries whenever they change. If there is no visible NavBackStackEntry, this will be set to an empty list.

  • CREATED entries are listed first and include all entries that are in the process of completing their exit transition. Note that this can include entries that have been popped off the Navigation back stack.

  • STARTED entries on the back stack are next and include all entries that are running their enter transition and entries whose destination is partially covered by a FloatingWindow destination

  • The last entry in the list is the topmost entry in the back stack and is in the RESUMED state only if its enter transition has completed. Otherwise it too will be STARTED.

Note that the Lifecycle of any entry cannot be higher than the containing Activity/Fragment - if the Activity is not RESUMED, no entry will be RESUMED, no matter what the transition state is.

Extension functions