当传递一个参数没问题时,我使用this link传递参数给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)
}
但是我不知道如何将多个参数传递给Constructor并使用上面的代码将其返回。 你能帮我吗?
答案 0 :(得分:1)
您的getViewModel
函数获取lambda,该Lambda生成ViewModel作为参数。在这种情况下,您可以执行以下操作:
val param1 = ...
val param2 = ...
val param3 = ...
getViewModel {
YourViewModel(param1, param2, param3...)
}
传递给getViewModel
的Lambda捕获所有参数。然后,您在ViewModelFactory
处调用此lambda并创建ViewModel:
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return creator() as T
}