Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.draewil.driver.viewmodel
- import android.app.Application
- import android.arch.lifecycle.AndroidViewModel
- import android.arch.lifecycle.ViewModel
- import android.arch.lifecycle.ViewModelProvider
- import com.draewil.driver.viewmodel.debug.DebugLocationViewModel
- import com.draewil.driver.viewmodel.route.RouteViewModel
- class ViewModelFactory internal constructor(application: Application) :
- ViewModelProvider.AndroidViewModelFactory(application) {
- private val viewModelCache: MutableMap<String, AndroidViewModel> = mutableMapOf()
- private val definedViewModels = listOf(
- BatteryViewModel::class.java
- )
- override fun <T : ViewModel?> create(modelClass: Class<T>): T {
- definedViewModels.firstOrNull {
- it.isAssignableFrom(modelClass)
- }?.let {
- @Suppress("UNCHECKED_CAST")
- return getViewModel(modelClass) as T
- }
- throw IllegalArgumentException("Unknown class: $modelClass")
- }
- private fun <T : ViewModel?> getViewModel(modelClass: Class<T>): ViewModel? =
- modelClass.name?.let {
- if (viewModelCache.containsKey(it)) {
- viewModelCache[it]
- } else {
- (super.create(modelClass) as AndroidViewModel).apply {
- viewModelCache[it] = this
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment