簡體   English   中英

如何創建自定義 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)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM