android viewmodel工厂类在更新生命周期版本后不工作

fcipmucu  于 2022-11-27  发布在  Android
关注(0)|答案(2)|浏览(138)

我使用的是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个字符
谢谢你

fykwrbwg

fykwrbwg1#

你写了:

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发行说明中有特别说明:

  • 突破源头的变革 *:ViewModelProvider已在Kotlin中重写ViewModelProvider.Factory.create方法现在不再允许可为null泛型
fcwjkofz

fcwjkofz2#

现在已弃用,因此您可以使用- ViewModelProvider.AndroidViewModelFactory()-来代替它。这是来自文档https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders的链接

相关问题