방법 AndroidViewModel보기 모델 공장을 만드는 방법?

사라 :

내가보기 모델 공장을 만들 필요가 그래서 나는, 뷰 모델 (userData에) 생성 될 때 값을 전달해야

여기에 내가 필요 내 뷰 모델입니다 applicationuserData이를 초기화하기 위해서ScoreViewModel

class ScoreViewModel(application: Application, userData: UserKM) : AndroidViewModel(application) {



}

하지만 지금 내가 전달하는 방법을 혼동하고 application내가 ViewModel에 공장을 만들 때

class ScoreViewModelFactory(private val userData: UserKM) : ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) {

            return ScoreViewModel(userData = userData,application = ?????? ) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }

}

어떻게해야합니까?

나 :

당신이 뭔가를 할 수 있습니다 :

class Factory(val app: Application) : ViewModelProvider.Factory {
        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
            if (modelClass.isAssignableFrom(NewsViewModel::class.java)) {
                @Suppress("UNCHECKED_CAST")
                return NewsViewModel(app) as T
            }
            throw IllegalArgumentException("Unable to construct viewmodel")
        }
    }

당신의 활동이나 조각에서, 당신은 :

/**
     * One way to delay creation of the viewModel until an appropriate lifecycle method is to use
     * lazy. This requires that viewModel not be referenced before onActivityCreated, which we
     * do in this Fragment.
     */
    private val viewModel: NewsViewModel by lazy {
        val activity = requireNotNull(this.activity) {
            "You can only access the viewModel after onActivityCreated()"
        }
        ViewModelProviders.of(this, NewsViewModel.Factory(activity.application))
            .get(NewsViewModel::class.java)
    }

그리고 당신의 ViewModel 같이 볼 수에 여기 :

class NewsViewModel(application: Application) : AndroidViewModel(application)

자세한 세부 사항을 위해 당신이 볼 수 https://github.com/Ali-Rezaei/News-Cache/blob/master/app/src/main/java/com/sample/android/news/viewmodels/NewsViewModel.kt

추천

출처http://43.154.161.224:23101/article/api/json?id=351383&siteId=1