// SpeakerFragment.kt class SpeakerFragment : BaseFragment() { private val speakerViewModel by viewModel() } // BaseFragment.kt abstract class BaseFragment : DaggerFragment() { @Inject lateinit var viewModelFactory: ViewModelProvider.Factory protected inline fun viewModel(): Lazy = lazy { viewModelProvider(viewModelFactory) } protected inline fun activityViewModel(): Lazy = lazy { activityViewModelProvider(viewModelFactory) } protected inline fun parentViewModel(): Lazy = lazy { parentViewModelProvider(viewModelFactory) } } // Extensions.kt /** * For Fragments, allows declarations like * ``` * val myViewModel = viewModelProvider(myViewModelFactory) * ``` */ inline fun Fragment.viewModelProvider( provider: ViewModelProvider.Factory ) = ViewModelProviders.of(this, provider).get(VM::class.java) /** * Like [Fragment.viewModelProvider] for Fragments that want a [ViewModel] scoped to the Activity. */ inline fun Fragment.activityViewModelProvider( provider: ViewModelProvider.Factory ) = ViewModelProviders.of(requireActivity(), provider).get(VM::class.java) /** * Like [Fragment.viewModelProvider] for Fragments that want a [ViewModel] scoped to the parent Fragment. */ inline fun Fragment.parentViewModelProvider( provider: ViewModelProvider.Factory ) = ViewModelProviders.of(requireParentFragment(), provider).get(VM::class.java)