[英]How to create a custom viewModel provider class where i can avoid the viewModel cast?
早上好;
我有这个自定义 ViewModel 工厂 class:
class AlreadyHaveAnAccountFragmentViewModelFactory (private val userDataSourceRepository: UserDataSourceRepository) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return AlreadyHaveAnAccountViewModel(userDataSourceRepository) as T
}
}
/**
* Initializing our ViewModel using a custom Factory design pattern
*/
alreadyHaveAnAccountViewModel = ViewModelProviders.of(
this,
AlreadyHaveAnAccountFragmentViewModelFactory(
RepositoryFactory.createApiRepository()
)
).get(AlreadyHaveAnAccountViewModel::class.java)
function 创建返回AlreadyHaveAnAccountViewModel(userDataSourceRepository)其中AlreadyHaveAnAccountViewModel是我的 viewModel class。 我需要创建一个自定义 viewModel 工厂 class ,我可以在其中传递AlreadyHaveAnAccountViewModel参数,或者最终避免讨厌的演员表。
帮助
我找到了答案:使用这种方法,您最终可以避免演员阵容。 这样,您的所有项目中只有一个 ViewModelProvider。
这将适用于任何接受 UserDataSourceRepository 作为构造函数参数的 class 并且如果 class 没有正确的构造函数,则会抛出 NoSuchMethodException。
class AlreadyHaveAnAccountFragmentViewModelFactory (private val userDataSourceRepository: UserDataSourceRepository) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor(UserDataSourceRepository::class.java).newInstance(userDataSourceRepository) as T
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.