Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // SpeakerFragment.kt
- class SpeakerFragment : BaseFragment() {
- private val speakerViewModel by viewModel<SpeakerViewModel>()
- }
- // BaseFragment.kt
- abstract class BaseFragment : DaggerFragment() {
- @Inject
- lateinit var viewModelFactory: ViewModelProvider.Factory
- protected inline fun <reified VM : ViewModel> viewModel(): Lazy<VM> =
- lazy { viewModelProvider<VM>(viewModelFactory) }
- protected inline fun <reified VM : ViewModel> activityViewModel(): Lazy<VM> =
- lazy { activityViewModelProvider<VM>(viewModelFactory) }
- protected inline fun <reified VM : ViewModel> parentViewModel(): Lazy<VM> =
- lazy { parentViewModelProvider<VM>(viewModelFactory) }
- }
- // Extensions.kt
- /**
- * For Fragments, allows declarations like
- * ```
- * val myViewModel = viewModelProvider(myViewModelFactory)
- * ```
- */
- inline fun <reified VM : ViewModel> 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 <reified VM : ViewModel> 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 <reified VM : ViewModel> Fragment.parentViewModelProvider(
- provider: ViewModelProvider.Factory
- ) = ViewModelProviders.of(requireParentFragment(), provider).get(VM::class.java)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement