[英]viewmodel factory class doesn't work after update lifecycle version
I was using def lifecycle_version = "2.3.1"
,我正在使用def lifecycle_version = "2.3.1"
,
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
. implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
。
but I had to update version to def lifecycle_version = "2.4.0-alpha03"
to use some features, but ViewModelProvider.Factory
class doesn't work after I use def lifecycle_version = "2.4.0-alpha03"
.但我必须将版本更新为def lifecycle_version = "2.4.0-alpha03"
才能使用某些功能,但ViewModelProvider.Factory
class 在我使用def lifecycle_version = "2.4.0-alpha03"
后不起作用。
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()
}
}
}
the error messages are错误信息是
! ! 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
Thanks..谢谢..
You've written:你写过:
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
But what the error message is saying is that create
must always have a non-null ViewModel
type.但是错误消息说的是create
必须始终具有非空的ViewModel
类型。 You need to change your method signature to remove the ?
您需要更改您的方法签名以删除?
that indicates nullability on your <T : ViewModel?>
:表示您的<T : ViewModel?>
空性:
override fun <T : ViewModel> create(modelClass: Class<T>): T {
This is specifically called out in the Lifecycle 2.4 release notes : Lifecycle 2.4 发行说明中特别提到了这一点:
Source-breaking change :
ViewModelProvider
has been rewritten in Kotlin.源代码更改:ViewModelProvider
已在 Kotlin 中重写。ViewModelProvider.Factory.create
method now longer allows nullable generic.ViewModelProvider.Factory.create
方法现在不再允许可空泛型。
that is deprecated right now so you Can use - ViewModelProvider.AndroidViewModelFactory() - instead of it.现在已弃用,因此您可以使用 - ViewModelProvider.AndroidViewModelFactory() - 而不是它。 and this is the link from the documentation https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders这是来自文档https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders的链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.