将多个参数传递给 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
}
我使用 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
}