0

I used this link for pass parameter to ViewModel constructor when pass one parameter no problem

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)
}

but i do not know how to can pass multi parameters to Constructor and return it with above code. can you help me?

1 Answer 1

1

Your getViewModel function get lambda, that produces ViewModel, as parameter. And in this case, you could do something like this:

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

Lambda passed to getViewModel capture all params. And later you invoke this lambda at ViewModelFactory and create ViewModel:

override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    return creator() as T
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.