我正在使用 def lifecycle_version = "2.3.1"
,implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
.
但我必须将版本更新为 def lifecycle_version = "2.4.0-alpha03"
使用某些功能,但 ViewModelProvider.Factory
我使用 def lifecycle_version = "2.4.0-alpha03"
后类(class)不起作用.
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
谢谢..
最佳答案
你写过:
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
但是错误消息的意思是create
必须始终有一个非空 ViewModel
类型。您需要更改方法签名以删除 ?
这表明您的 <T : ViewModel?>
上的可空性:override fun <T : ViewModel> create(modelClass: Class<T>): T {
这在 Lifecycle 2.4 release notes 中特别指出。 :Source-breaking change:
ViewModelProvider
has been rewritten in Kotlin.ViewModelProvider.Factory.create
method now longer allows nullable generic.
关于android - 更新生命周期版本后 View 模型工厂类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69892377/