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

*** ** * ** ***


```
public class ViewModelProvider.AndroidViewModelFactory extends ViewModelProvider.NewInstanceFactory
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.lifecycle.ViewModelProvider.NewInstanceFactory](https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.NewInstanceFactory) ||
|   | ↳ | [androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory](https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory) |

*** ** * ** ***

Factory that creates `https://developer.android.com/reference/androidx/lifecycle/AndroidViewModel` and `https://developer.android.com/reference/androidx/lifecycle/ViewModel` instances.

## Summary

| ### Public fields |
|---|---|
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras.Key<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Application.html>` | `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#APPLICATION_KEY()` A `https://developer.android.com/reference/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/androidx/lifecycle/ViewModel`. |

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

| ### 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/ViewModelProvider.AndroidViewModelFactory#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)` Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`. |
| `@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/ViewModelProvider.AndroidViewModelFactory#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 )` Creates a new instance of the given `https://developer.android.com/reference/java/lang/Class.html`. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory` | `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#getInstance(android.app.Application)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Application.html application)` Returns a singleton instance of `https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory`. |

### Inherited methods

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

### APPLICATION_KEY

```
public static final @NonNull CreationExtras.Key<@NonNull Application> APPLICATION_KEY
```

A `https://developer.android.com/reference/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/androidx/lifecycle/ViewModel`.

## Public constructors

### AndroidViewModelFactory

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

```
public AndroidViewModelFactory()
```

Constructs a new `https://developer.android.com/reference/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/androidx/lifecycle/ViewModelProvider.AndroidViewModelFactory#APPLICATION_KEY()` in `https://developer.android.com/reference/androidx/lifecycle/viewmodel/CreationExtras` to create an `https://developer.android.com/reference/androidx/lifecycle/AndroidViewModel`. Otherwise, `https://developer.android.com/reference/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

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

```
public AndroidViewModelFactory(@NonNull Application application)
```

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

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

## Public methods

### create

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

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 |
|---|---|
| `@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/ViewModelProvider.Factory#create(java.lang.Class)` |

### create

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

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

| Parameters |
|---|---|
| `@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 |
| `@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(java.lang.Class,androidx.lifecycle.viewmodel.CreationExtras)` |

### getInstance

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

```
public static final @NonNull ViewModelProvider.AndroidViewModelFactory getInstance(@NonNull Application application)
```

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

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

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