简体   繁体   English

是否可以为 ViewModelProvider.Factory 创建一个带有 T 参数的基本构造函数?

[英]Is it possible to create a basic constructor with T-parameters for ViewModelProvider.Factory?

I need your help...if I have many ViewModels with constructors(with different parameters - some repositories) - then it turns out there should be as many custom ViewModelProvider.Factories?then this doubles the writing of code.Something like that for example:我需要你的帮助......如果我有许多带有构造函数的 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")
        }
    }

}

and so forth.....等等……

if i have 100 ViewModels i need to create 100 Factories..Is there another way??如果我有 100 个 ViewModel,我需要创建 100 个工厂。还有其他方法吗?

You don't have to create a Factory class with a different parameter (different repository).您不必使用不同的参数(不同的存储库)创建工厂 class。 You could create just one ViewModelFactory class that have more than one parameter (repository).您可以只创建一个具有多个参数(存储库)的 ViewModelFactory class。 In your case:在你的情况下:

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.

相关问题 匕首2 viewmodels和ViewModelProvider.Factory - dagger 2 viewmodels and ViewModelProvider.Factory 将ViewModelProvider.Factory的提供程序注入espresso测试 - Inject provider of ViewModelProvider.Factory into esspresso test 如何将 ViewModelProvider.Factory 注入片段 - How to inject ViewModelProvider.Factory into a fragment Dagger 2 ViewModelProvider.Factory绑定多次 - Dagger 2 ViewModelProvider.Factory bound multiple times ViewModelProvider.Factory 总是返回一个视图模型 - ViewModelProvider.Factory always return one viewmodel 获取ViewModel ViewModelProvider.Factory和应用程序上下文 - Get ViewModel ViewModelProvider.Factory and Application Context ViewModelProvider.Factory 和 ViewModelProvider.NewInstanceFactory 有什么区别? - What are the differences between ViewModelProvider.Factory and ViewModelProvider.NewInstanceFactory? 使用Android上的Dagger和Java,ViewModelProvider.Factory在片段上保持为空 - ViewModelProvider.Factory remains null on fragment using Dagger and Java on Android 为什么为我的viewModel类实现ViewModelProvider.Factory很重要? - Why it is important to implement a ViewModelProvider.Factory for my viewModel class? Dagger2,在依赖组件中为 ViewModelProvider.Factory 添加绑定 - Dagger2, adding a binding for ViewModelProvider.Factory in a dependant component
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM