# ViewModelProvider.Factory

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

*** ** * ** ***

Common/AllAndroid/JVM
- Cmn

  ```
  interface ViewModelProvider.Factory
  ```
Known direct subclasses [AbstractSavedStateViewModelFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/AbstractSavedStateViewModelFactory), [SavedStateViewModelFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/SavedStateViewModelFactory), [ViewModelProvider.NewInstanceFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.NewInstanceFactory)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/AbstractSavedStateViewModelFactory` | **This class is deprecated.** Use \`viewModelFactory\` or implement \`ViewModelProvider.Factory\`, combined with \`CreationExtras.createSavedStateHandle()\`. |
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/SavedStateViewModelFactory` | A `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory` that creates `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel`s with access to a `https://developer.android.com/reference/kotlin/androidx/lifecycle/SavedStateHandle` in their constructor. |
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.NewInstanceFactory` | Simple factory, which calls empty constructor on the give class. |

Known indirect subclasses [ViewModelProvider.AndroidViewModelFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory` | Factory that creates `https://developer.android.com/reference/kotlin/androidx/lifecycle/AndroidViewModel` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` instances. |

*** ** * ** ***

Implementations of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory` interface are responsible for instantiating `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel`s.

## Summary

| ### Public companion functions |
|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory` | `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#from(kotlin.Array)(vararg initializers: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelInitializer<*>)` Creates an `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory` using the given `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory.Companion#from(kotlin.Array)`. | android |

| ### Public functions |
|---|---|---|
| `open T` | `<T : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(java.lang.Class)(modelClass: https://developer.android.com/reference/java/lang/Class.html<T>)` Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`. | android |
| `open T` | `<T : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)(modelClass: https://developer.android.com/reference/java/lang/Class.html<T>, extras: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras)` Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`. | android |
| `T` | `<T : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)(modelClass: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<T>, extras: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras)` Creates a new instance of the given `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(kotlin.reflect.KClass,androidx.lifecycle.viewmodel.CreationExtras)`. | Cmn android |

## Public companion functions

### from

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

```
fun from(vararg initializers: ViewModelInitializer<*>): ViewModelProvider.Factory
```

Creates an `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory` using the given `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory.Companion#from(kotlin.Array)`.

| Parameters |
|---|---|
| `vararg initializers: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelInitializer<*>` | class initializer pairs used to create simple ViewModels |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory` |   |

## Public functions

### create

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

```
open fun <T : ViewModel> create(modelClass: Class<T>): T
```

Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`.

Default implementation throws `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unsupported-operation-exception/index.html`.

| Parameters |
|---|---|
| `modelClass: https://developer.android.com/reference/java/lang/Class.html<T>` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` to create |

| Returns |
|---|---|
| `T` | new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(java.lang.Class)` |

### create

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

```
open fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T
```

Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`.

| Parameters |
|---|---|
| `modelClass: https://developer.android.com/reference/java/lang/Class.html<T>` | `https://developer.android.com/reference/java/lang/Class.html` of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` to create |
| `extras: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras` | `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras` passed to the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory` to create the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` |

| Returns |
|---|---|
| `T` | new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` instance of type `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` |

### create

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

```
fun <T : ViewModel> create(modelClass: KClass<T>, extras: CreationExtras): T
```

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

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

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