提问者:小点点

Savedstateviewmodelfactory是finall,无法继承


class SettingsViewModelFactory(application: Application, owner: SavedStateRegistryOwner) : SavedStateViewModelFactory(application, owner){


    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(SettingsViewModel::class.java)){
            return SettingsViewModel() as T
        }
        throw IllegalArgumentException("Invalid ViewModel class")
    }

}

我在SavedStateViewModelFactory下面看到一个红色下划线,表示该类型是final类型,不能从其继承。 我该怎么办? 文件太模糊了。 还有,我把什么状态放入返回?


共1个答案

匿名用户

如果要创建允许使用SavedStateHandle构造函数参数的自己的工厂,则应扩展AbstractSavedStateViewModelFactory,而不是扩展SavedStateViewModelFactory:

提供自定义ViewModelProvider.Factory实例时,可以通过扩展AbstractSavedStateViewModelFactory启用SavedStateHandle

但是,您不需要任何自定义工厂来支持具有零参数构造函数的ViewModel--默认情况下支持该构造函数。 只有当需要将自定义参数传递给ViewModel时,才需要自定义工厂。 在您的代码中,您可以完全删除自定义工厂。