Skip to content

Instantly share code, notes, and snippets.

@tonnylitao
Last active December 12, 2020 16:48
Show Gist options
  • Save tonnylitao/629fd3f1547c5988fcc389fa8e6b4c20 to your computer and use it in GitHub Desktop.
Save tonnylitao/629fd3f1547c5988fcc389fa8e6b4c20 to your computer and use it in GitHub Desktop.
Android ViewModel with Variable Arguments
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import kotlin.reflect.full.primaryConstructor
class AndroidViewModelFactory(private vararg val args: Any) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>) =
modelClass.kotlin.primaryConstructor?.call(*args)
?: throw IllegalArgumentException("$modelClass primaryConstructor is null")
}
class YourFragment : Fragment() {
val intentViewModel by viewModels<IntentViewModel> {
AndroidViewModelFactory(requireActivity().application, requireActivity().intent)
}
val intViewModel by viewModels<IntViewModel> {
AndroidViewModelFactory(requireActivity().application, 100)
}
val stringViewModel by viewModels<StringViewModel> {
AndroidViewModelFactory(requireActivity().application, "String")
}
//...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment