Savedstateviewmodelfactory 是finall,不能继承
Savedstateviewmodelfactory is finall, cannot inherit
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 下方看到一条红色下划线,表示该类型是最终类型,不能从中继承。我该怎么办?文档太模糊了。
另外,我应该将什么状态放入 return?
如果您想创建自己的允许使用 SavedStateHandle
构造函数参数的工厂,您可以扩展 AbstractSavedStateViewModelFactory
, not SavedStateViewModelFactory
as per the explicit note on the documentation:
When providing a custom ViewModelProvider.Factory
instance, you can enable usage of SavedStateHandle
by extending AbstractSavedStateViewModelFactory
.
但是,您不需要任何自定义工厂来支持具有零参数构造函数的 ViewModel - 这是默认支持的。如果需要将自定义参数传递给 ViewModel,则只需要一个自定义工厂。对于您的代码,您可以完全删除自定义工厂。
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 下方看到一条红色下划线,表示该类型是最终类型,不能从中继承。我该怎么办?文档太模糊了。 另外,我应该将什么状态放入 return?
如果您想创建自己的允许使用 SavedStateHandle
构造函数参数的工厂,您可以扩展 AbstractSavedStateViewModelFactory
, not SavedStateViewModelFactory
as per the explicit note on the documentation:
When providing a custom
ViewModelProvider.Factory
instance, you can enable usage ofSavedStateHandle
by extendingAbstractSavedStateViewModelFactory
.
但是,您不需要任何自定义工厂来支持具有零参数构造函数的 ViewModel - 这是默认支持的。如果需要将自定义参数传递给 ViewModel,则只需要一个自定义工厂。对于您的代码,您可以完全删除自定义工厂。