# ViewModelProvider.AndroidViewModelFactory

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.android.kt+class:androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory) Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.0.0)

*** ** * ** ***

Common/AllAndroid/JVM
- android

  ```
  open class ViewModelProvider.AndroidViewModelFactory : ViewModelProvider.NewInstanceFactory
  ```

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.lifecycle.ViewModelProvider.NewInstanceFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.NewInstanceFactory) ||
|   | ↳ | [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.

## Summary

| ### Public companion functions |
|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory` | `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#getInstance(android.app.Application)(application: https://developer.android.com/reference/android/app/Application.html)` Returns a singleton instance of `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`. | android |

| ### Public companion properties |
|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras.Key<https://developer.android.com/reference/android/app/Application.html>` | `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#APPLICATION_KEY()` A `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras.Key` to query the `https://developer.android.com/reference/android/app/Application.html` instance when creating a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel`. | android |

| ### Public constructors |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#AndroidViewModelFactory()()` Constructs a new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`. | android |
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#AndroidViewModelFactory(android.app.Application)(application: https://developer.android.com/reference/android/app/Application.html)` Constructs a new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`. | android |

| ### Public functions |
|---|---|---|
| `open T` | `<T : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#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.AndroidViewModelFactory#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 |

### Inherited functions

From [androidx.lifecycle.ViewModelProvider.NewInstanceFactory](https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.NewInstanceFactory) `open T` `<T : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.NewInstanceFactory#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)`.
android

## Public companion functions

### getInstance

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

```
fun getInstance(application: Application): ViewModelProvider.AndroidViewModelFactory
```

Returns a singleton instance of `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`.

| Parameters |
|---|---|
| `application: https://developer.android.com/reference/android/app/Application.html` | application instance to pass to `https://developer.android.com/reference/kotlin/androidx/lifecycle/AndroidViewModel` constructors |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory` | a singleton instance of `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory` |

## Public companion properties

### APPLICATION_KEY

android

```
val APPLICATION_KEY: CreationExtras.Key<Application>
```

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras.Key` to query the `https://developer.android.com/reference/android/app/Application.html` instance when creating a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel`.

## Public constructors

### AndroidViewModelFactory

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

```
AndroidViewModelFactory()
```

Constructs a new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`.

When constructed this way, the caller must provide an `https://developer.android.com/reference/android/app/Application.html` via the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#APPLICATION_KEY()` in `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras` to create an `https://developer.android.com/reference/kotlin/androidx/lifecycle/AndroidViewModel`. Otherwise, `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#create(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` throws an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`.

### AndroidViewModelFactory

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

```
AndroidViewModelFactory(application: Application)
```

Constructs a new `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`.

| Parameters |
|---|---|
| `application: https://developer.android.com/reference/android/app/Application.html` | application instance to pass to `https://developer.android.com/reference/kotlin/androidx/lifecycle/AndroidViewModel` constructors |

## Public functions

### create

android

```
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

```
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)` |