如何创建自定义 viewModel 提供程序 class 以避免 viewModel 强制转换?
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)
函数创建 returns AlreadyHaveAnAccountViewModel(userDataSourceRepository) 其中 AlreadyHaveAnAccountViewModel 是我的视图模型 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
}
}
早上好;
我有这个自定义 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)
函数创建 returns AlreadyHaveAnAccountViewModel(userDataSourceRepository) 其中 AlreadyHaveAnAccountViewModel 是我的视图模型 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
}
}