我使用的是def lifecycle_version = "2.3.1"
,implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
.
但是我必须将版本更新到def lifecycle_version = "2.4.0-alpha03"
才能使用某些特性,但是在我使用def lifecycle_version = "2.4.0-alpha03"
之后,ViewModelProvider.Factory
类不起作用。
class ViewModelFactory(private val param:String,private val param2: String) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return if (modelClass.isAssignableFrom(ReviewViewModel::class.java)) {
ReviewViewModel(param,param2) as T
}else if(modelClass.isAssignableFrom(FoodViewModel::class.java)){
FoodViewModel(param,param2) as T
else {
throw IllegalArgumentException()
}
}
}
错误消息为
!Class 'ViewModelFactory' is not abstract and does not implement abstract member public abstract fun <T : ViewModel> create(modelClass: Class<T>): T defined in androidx.lifecycle.ViewModelProvider.Factory
!'create' overrides nothing
个字符
谢谢你
2条答案
按热度按时间fykwrbwg1#
你写了:
但是错误消息说的是
create
必须总是有一个非空的ViewModel
类型。你需要修改你的方法签名来删除<T : ViewModel?>
上指示为空性的?
:这在Lifecycle 2.4发行说明中有特别说明:
ViewModelProvider
已在Kotlin中重写ViewModelProvider.Factory.create
方法现在不再允许可为null泛型fcwjkofz2#
现在已弃用,因此您可以使用- ViewModelProvider.AndroidViewModelFactory()-来代替它。这是来自文档https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders的链接