[英]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.