将多个参数传递给ViewModel主构造函数

时间:2020-06-18 12:06:54

标签: android kotlin mvvm viewmodel

当传递一个参数没问题时,我使用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并使用上面的代码将其返回。 你能帮我吗?

1 个答案:

答案 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
}
相关问题