사라 :
내가보기 모델 공장을 만들 필요가 그래서 나는, 뷰 모델 (userData에) 생성 될 때 값을 전달해야
여기에 내가 필요 내 뷰 모델입니다 application
및 userData
이를 초기화하기 위해서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