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

Pass multi parameters to ViewModel Primary Constructor

我使用 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 并 return 使用上面的代码。 你能帮帮我吗?

您的 getViewModel 函数获取生成 ViewModel 的 lambda 作为参数。在这种情况下,您可以这样做:

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
}