[英]Is it possible to create a basic constructor with T-parameters for ViewModelProvider.Factory?
我需要你的帮助......如果我有许多带有构造函数的 ViewModel(具有不同的参数 - 一些存储库) - 那么事实证明应该有尽可能多的自定义 ViewModelProvider.Factories?那么这会使代码的编写加倍。例如:
//1st ViewModel
OneViewModel1(val repos: OneRepository) : ViewModel() {
}
//1st Factory
class OneFactory(private val repository: OneRepository):ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return if (modelClass.isAssignableFrom(OneViewModel::class.java)) OneViewModel(repository) as T else {
throw IllegalArgumentException("ViewModel Not Found")
}
}
}
//2d OneViewModel
TwoViewModel(val repository: TwoRepository) : ViewModel() {
}
//1st Factory
class TwoFactory(private val repository: TwoRepository):ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return if (modelClass.isAssignableFrom(TwoViewModel::class.java)) TwoViewModel(repository) as T else {
throw IllegalArgumentException("ViewModel Not Found")
}
}
}
等等……
如果我有 100 个 ViewModel,我需要创建 100 个工厂。还有其他方法吗?
您不必使用不同的参数(不同的存储库)创建工厂 class。 您可以只创建一个具有多个参数(存储库)的 ViewModelFactory class。 在你的情况下:
class ViewModelFactory(private val repositoryOne: OneRepository, private val repositoryTwo: TwoRepository): ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return when {
modelClass.isAssignableFrom(OneViewModel::class.java) -> OneViewModel(repositoryOne) as T
modelClass.isAssignableFrom(TwoViewModel::class.java) -> TwoViewModel(repositoryTwo) as T
else -> IllegalArgumentException("ViewModel Not Found")
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.