Skip to content

Instantly share code, notes, and snippets.

@yrezgui
Created November 30, 2022 22:46
Show Gist options
  • Save yrezgui/68bcee3735042f036aa43305ceee0a9b to your computer and use it in GitHub Desktop.
Save yrezgui/68bcee3735042f036aa43305ceee0a9b to your computer and use it in GitHub Desktop.
ViewModel with Factory
package com.example.app
import android.app.Application
import android.content.Context
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
import androidx.lifecycle.createSavedStateHandle
import androidx.lifecycle.viewmodel.CreationExtras
class HomeViewModel(
application: Application,
savedStateHandle: SavedStateHandle
) : AndroidViewModel(application) {
private val context: Context
get() = getApplication()
companion object {
val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
modelClass: Class<T>,
extras: CreationExtras
): T {
// Get the Application object from extras
val application = checkNotNull(extras[APPLICATION_KEY])
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
return HomeViewModel(
application,
savedStateHandle
) as T
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment