# SavedStateViewModelFactory

Artifact: [androidx.lifecycle:lifecycle-viewmodel-savedstate](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/SavedStateViewModelFactory.+class:androidx.lifecycle.SavedStateViewModelFactory) Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0)

*** ** * ** ***


```
public final class SavedStateViewModelFactory implements ViewModelProvider.Factory
```

<br />

*** ** * ** ***

A `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` that creates `https://developer.android.com/reference/androidx/lifecycle/ViewModel`s with access to a `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` in their constructor.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#SavedStateViewModelFactory()()` Constructs this factory. |
| `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#SavedStateViewModelFactory(android.app.Application,androidx.savedstate.SavedStateRegistryOwner)( https://developer.android.com/reference/android/app/Application.html application, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner )` Constructs a new `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory`. |
| `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#SavedStateViewModelFactory(android.app.Application,androidx.savedstate.SavedStateRegistryOwner,android.os.Bundle)( https://developer.android.com/reference/android/app/Application.html application, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner, https://developer.android.com/reference/android/os/Bundle.html defaultArgs )` Constructs a new `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory`. |

| ### Public methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(java.lang.Class)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass)` {@inheritDoc} |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(kotlin.String,java.lang.Class)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html key, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass )` Creates a new instance of the given `Class`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras )` {@inheritDoc} |
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | `<T extends https://developer.android.com/reference/androidx/lifecycle/ViewModel> https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)( @https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras )` Creates a new instance of the given `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)`. |

## Public constructors

### SavedStateViewModelFactory

Added in [2.5.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.0)

```
public SavedStateViewModelFactory()
```

Constructs this factory.

When using this factory, the component scoping the `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` must first invoke `https://developer.android.com/reference/androidx/lifecycle/package-summary#(androidx.savedstate.SavedStateRegistryOwner).enableSavedStateHandles()`.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/lifecycle/package-summary#(androidx.lifecycle.viewmodel.CreationExtras).createSavedStateHandle()` |   |

### SavedStateViewModelFactory

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0)

```
public SavedStateViewModelFactory(
    Application application,
    @NonNull SavedStateRegistryOwner owner
)
```

Constructs a new `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/app/Application.html application` | application instance. If null, `https://developer.android.com/reference/androidx/lifecycle/AndroidViewModel` instances will not be supported. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner` | `https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner` that will provide restored state for created `https://developer.android.com/reference/androidx/lifecycle/ViewModel`s. Must implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner` to support state retention. |

### SavedStateViewModelFactory

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0)

```
public SavedStateViewModelFactory(
    Application application,
    @NonNull SavedStateRegistryOwner owner,
    Bundle defaultArgs
)
```

Constructs a new `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory`.

When constructed this way, any `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras` provided to `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)` will override the state configured here. It is not possible to mix the arguments received here with `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/app/Application.html application` | application instance. If null, `https://developer.android.com/reference/androidx/lifecycle/AndroidViewModel` instances will not be supported. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner owner` | `https://developer.android.com/reference/androidx/savedstate/SavedStateRegistryOwner` that will provide restored state for created `https://developer.android.com/reference/androidx/lifecycle/ViewModel`s. Must implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner` to support state retention. |
| `https://developer.android.com/reference/android/os/Bundle.html defaultArgs` | default values to populate the `https://developer.android.com/reference/androidx/lifecycle/SavedStateHandle` if no state is restored |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#(android.app.Application,androidx.savedstate.SavedStateRegistryOwner,android.os.Bundle)` does not implement `https://developer.android.com/reference/androidx/lifecycle/ViewModelStoreOwner` |

## Public methods

### create

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0)

```
public @NonNull T <T extends ViewModel> create(@NonNull Class<@NonNull T> modelClass)
```

{@inheritDoc}

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the given modelClass does not have a classname |

### create

Added in [2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0)

```
public final @NonNull T <T extends ViewModel> create(
    @NonNull String key,
    @NonNull Class<@NonNull T> modelClass
)
```

Creates a new instance of the given `Class`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html key` | a key associated with the requested ViewModel |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | new `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/androidx/lifecycle/SavedStateViewModelFactory#create(kotlin.String,java.lang.Class)` |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unsupported-operation-exception/index.html` | if there is no lifecycle |

### create

```
public @NonNull T <T extends ViewModel> create(
    @NonNull Class<@NonNull T> modelClass,
    @NonNull CreationExtras extras
)
```

{@inheritDoc}

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if the provided extras do not provide a `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.NewInstanceFactory.Companion#VIEW_MODEL_KEY()` |

### create

```
public @NonNull T <T extends ViewModel> create(
    @NonNull KClass<@NonNull T> modelClass,
    @NonNull CreationExtras extras
)
```

Creates a new instance of the given `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull T> modelClass` | `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html` of the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` to create |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras extras` | `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras` passed to the `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory` to create the `https://developer.android.com/reference/androidx/lifecycle/ViewModel` |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | new `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)` |