cómo crear opinión de la fábrica modelo para AndroidViewModel?

Sarah:

Necesito pasar valor cuando se crea el modelo de vista (userData), por lo que necesito para crear una fábrica de vista del modelo

aquí está mi modelo de vista, lo que necesito applicationy userDataque esta initScoreViewModel

class ScoreViewModel(application: Application, userData: UserKM) : AndroidViewModel(application) {



}

pero ahora estoy confundido cómo pasar applicationcuando se crea la fábrica modelo de vista

class ScoreViewModelFactory(private val userData: UserKM) : ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) {

            return ScoreViewModel(userData = userData,application = ?????? ) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }

}

Qué tengo que hacer ?

o bien:

Puede tener algo como esto:

class Factory(val app: Application) : ViewModelProvider.Factory {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            if (modelClass.isAssignableFrom(NewsViewModel::class.java)) {
                @Suppress("UNCHECKED_CAST")
                return NewsViewModel(app) as T
            }
            throw IllegalArgumentException("Unable to construct viewmodel")
        }
    }

En su actividad o fragmento tiene:

/**
     * One way to delay creation of the viewModel until an appropriate lifecycle method is to use
     * lazy. This requires that viewModel not be referenced before onActivityCreated, which we
     * do in this Fragment.
     */
    private val viewModel: NewsViewModel by lazy {
        val activity = requireNotNull(this.activity) {
            "You can only access the viewModel after onActivityCreated()"
        }
        ViewModelProviders.of(this, NewsViewModel.Factory(activity.application))
            .get(NewsViewModel::class.java)
    }

Y aquí el modelo de vista puede verse como:

class NewsViewModel(application: Application) : AndroidViewModel(application)

Para más detalles se puede ver en: https://github.com/Ali-Rezaei/News-Cache/blob/master/app/src/main/java/com/sample/android/news/viewmodels/NewsViewModel.kt

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=351391&siteId=1
Recomendado
Clasificación