Savedstateviewmodelfactory是final的,不能继承

Eri*_*oto 0 android kotlin android-viewmodel android-jetpack

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")
    }

}
Run Code Online (Sandbox Code Playgroud)

我在 SavedStateViewModelFactory 下方看到一条红色下划线,表示该类型是最终类型,不能继承。我该怎么办?文档太模糊了。另外我要在退货中放入什么状态?

ian*_*ake 8

如果您想创建自己的工厂来允许使用SavedStateHandle构造函数参数,您可以扩展AbstractSavedStateViewModelFactory,而不是SavedStateViewModelFactory按照文档中的明确注释

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

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

  • @takecare - 由您决定是否让“AbstractSavedStateViewModelFactory”的子类也采用“Application”对象并将其传递给[“AndroidViewModelFactory”](https://developer.android.com/reference/androidx/lifecycle /ViewModelProvider.AndroidViewModelFactory)如果您没有“ViewModel”的自定义构造函数,或者需要将“Application”传递给“ViewModel”。 (2认同)