Передача нескольких параметров в основной конструктор ViewModel - PullRequest
0 голосов
/ 18 июня 2020

Я использовал эту ссылку для параметра передачи конструктору ViewModel при передаче одного параметра без проблем

class ViewModelFactory<T>(val creator: () -> T) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    return creator() as T
   }
}

inline fun <reified T : ViewModel> Fragment.getViewModel(noinline creator: (() -> T)? = null): T {
return if (creator == null)
    ViewModelProviders.of(this).get(T::class.java)
else
    ViewModelProviders.of(this, ViewModelFactory(creator)).get(T::class.java)
}

inline fun <reified T : ViewModel> FragmentActivity.getViewModel(noinline creator: (() -> T)? = null): 
T {
return if (creator == null)
    ViewModelProviders.of(this).get(T::class.java)
else
    ViewModelProviders.of(this, ViewModelFactory(creator)).get(T::class.java)
}

, но я не знаю, как передать несколько параметров в конструктор и вернуть его с кодом выше. ты можешь мне помочь?

1 Ответ

1 голос
/ 18 июня 2020

Ваша getViewModel функция получает лямбда, которая производит ViewModel, в качестве параметра. И в этом случае вы можете сделать что-то вроде этого:

val param1 = ...
val param2 = ...
val param3 = ...
getViewModel {
   YourViewModel(param1, param2, param3...)
}

Лямбда, переданная в getViewModel, захватывает все параметры. А позже вы вызываете эту лямбду по адресу ViewModelFactory и создаете ViewModel:

override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    return creator() as T
}
...