简体   繁体   English

视图模型工厂 class 在更新生命周期版本后不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM