# NavGraphViewModelLazyKt

Added in 2.4.0

*** ** * ** ***


```
public final class NavGraphViewModelLazyKt
```

<br />

*** ** * ** ***

## Summary

| ### Public methods |
|---|---|
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-lazy/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull VM>` | `@https://developer.android.com/reference/androidx/annotation/MainThread <VM extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/navigation/NavGraphViewModelLazyKt#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.Int,kotlin.Function0,kotlin.Function0)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/Fragment receiver, @https://developer.android.com/reference/androidx/annotation/IdRes int navGraphId, Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras> extrasProducer, Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory> factoryProducer )` Returns a property delegate to access a `https://developer.android.com/reference/androidx/lifecycle/ViewModel` scoped to a navigation graph present on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack: |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-lazy/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull VM>` | `@https://developer.android.com/reference/androidx/annotation/MainThread <VM extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/navigation/NavGraphViewModelLazyKt#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.String,kotlin.Function0,kotlin.Function0)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/Fragment receiver, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html navGraphRoute, Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras> extrasProducer, Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory> factoryProducer )` Returns a property delegate to access a `https://developer.android.com/reference/androidx/lifecycle/ViewModel` scoped to a navigation graph present on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack: |

## Public methods

### navGraphViewModels

Artifact: [androidx.navigation:navigation-fragment](https://developer.android.com/jetpack/androidx/releases/navigation) [View Source](https://cs.android.com/search?q=file:androidx/navigation/NavGraphViewModelLazy.kt+function:navGraphViewModels)

```
@MainThread
public static final @NonNull Lazy<@NonNull VM> <VM extends ViewModel> navGraphViewModels(
    @NonNull Fragment receiver,
    @IdRes int navGraphId,
    Function0<@NonNull CreationExtras> extrasProducer,
    Function0<@NonNull ViewModelProvider.Factory> factoryProducer
)
```

Returns a property delegate to access a `https://developer.android.com/reference/androidx/lifecycle/ViewModel` scoped to a navigation graph present on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack:

```
class MyFragment : Fragment() {
    val viewmodel: MainViewModel by navGraphViewModels(R.id.main)
}
```

Custom `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` can be defined via `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.Int,kotlin.Function0,kotlin.Function0)` parameter, factory returned by it will be used to create `https://developer.android.com/reference/androidx/lifecycle/ViewModel`:

```
class MyFragment : Fragment() {
    val viewmodel: MainViewModel by navGraphViewModels(R.id.main) { myFactory }
}
```

This property can be accessed only after this NavGraph is on the NavController back stack, and an attempt access prior to that will result in an IllegalArgumentException.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/IdRes int navGraphId` | ID of a NavGraph that exists on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack |
| `Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras> extrasProducer` | lambda that will be called during initialization to return `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras`. If none is provided, this will use the extras from the `https://developer.android.com/reference/androidx/navigation/NavBackStackEntry` referenced by the `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.Int,kotlin.Function0,kotlin.Function0)`. |
| `Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory> factoryProducer` | lambda that will be called during initialization to return `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory`. If none is provided, this will use the factory from the `https://developer.android.com/reference/androidx/navigation/NavBackStackEntry` referenced by the `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.Int,kotlin.Function0,kotlin.Function0)`. |

### navGraphViewModels

Artifact: [androidx.navigation:navigation-fragment](https://developer.android.com/jetpack/androidx/releases/navigation) [View Source](https://cs.android.com/search?q=file:androidx/navigation/NavGraphViewModelLazy.kt+function:navGraphViewModels)

```
@MainThread
public static final @NonNull Lazy<@NonNull VM> <VM extends ViewModel> navGraphViewModels(
    @NonNull Fragment receiver,
    @NonNull String navGraphRoute,
    Function0<@NonNull CreationExtras> extrasProducer,
    Function0<@NonNull ViewModelProvider.Factory> factoryProducer
)
```

Returns a property delegate to access a `https://developer.android.com/reference/androidx/lifecycle/ViewModel` scoped to a navigation graph present on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack:

```
class MyFragment : Fragment() {
    val viewModel: MainViewModel by navGraphViewModels("main")
}
```

Custom `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` can be defined via `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.String,kotlin.Function0,kotlin.Function0)` parameter, factory returned by it will be used to create `https://developer.android.com/reference/androidx/lifecycle/ViewModel`:

```
class MyFragment : Fragment() {
    val viewModel: MainViewModel by navGraphViewModels("main") { myFactory }
}
```

This property can be accessed only after this NavGraph is on the NavController back stack, and an attempt access prior to that will result in an IllegalArgumentException.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html navGraphRoute` | `https://developer.android.com/reference/androidx/navigation/NavDestination#route()` of a NavGraph that exists on the `https://developer.android.com/reference/androidx/navigation/NavController` back stack. If a `https://developer.android.com/reference/androidx/navigation/NavDestination` with the given route does not exist on the back stack, an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` will be thrown. |
| `Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras> extrasProducer` | lambda that will be called during initialization to return `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras`. If none is provided, this will use the extras from the `https://developer.android.com/reference/androidx/navigation/NavBackStackEntry` referenced by the `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.String,kotlin.Function0,kotlin.Function0)`. |
| `Function0<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory> factoryProducer` | lambda that will be called during initialization to return `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory`. If none is provided, this will use the factory from the `https://developer.android.com/reference/androidx/navigation/NavBackStackEntry` referenced by the `https://developer.android.com/reference/androidx/navigation/package-summary#(androidx.fragment.app.Fragment).navGraphViewModels(kotlin.String,kotlin.Function0,kotlin.Function0)`. |