Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. // SpeakerFragment.kt
  2. class SpeakerFragment : BaseFragment() {
  3.  
  4. private val speakerViewModel by viewModel<SpeakerViewModel>()
  5. }
  6.  
  7. // BaseFragment.kt
  8. abstract class BaseFragment : DaggerFragment() {
  9.  
  10. @Inject
  11. lateinit var viewModelFactory: ViewModelProvider.Factory
  12.  
  13. protected inline fun <reified VM : ViewModel> viewModel(): Lazy<VM> =
  14. lazy { viewModelProvider<VM>(viewModelFactory) }
  15.  
  16. protected inline fun <reified VM : ViewModel> activityViewModel(): Lazy<VM> =
  17. lazy { activityViewModelProvider<VM>(viewModelFactory) }
  18.  
  19. protected inline fun <reified VM : ViewModel> parentViewModel(): Lazy<VM> =
  20. lazy { parentViewModelProvider<VM>(viewModelFactory) }
  21. }
  22.  
  23. // Extensions.kt
  24.  
  25. /**
  26. * For Fragments, allows declarations like
  27. * ```
  28. * val myViewModel = viewModelProvider(myViewModelFactory)
  29. * ```
  30. */
  31. inline fun <reified VM : ViewModel> Fragment.viewModelProvider(
  32. provider: ViewModelProvider.Factory
  33. ) = ViewModelProviders.of(this, provider).get(VM::class.java)
  34.  
  35. /**
  36. * Like [Fragment.viewModelProvider] for Fragments that want a [ViewModel] scoped to the Activity.
  37. */
  38. inline fun <reified VM : ViewModel> Fragment.activityViewModelProvider(
  39. provider: ViewModelProvider.Factory
  40. ) = ViewModelProviders.of(requireActivity(), provider).get(VM::class.java)
  41.  
  42. /**
  43. * Like [Fragment.viewModelProvider] for Fragments that want a [ViewModel] scoped to the parent Fragment.
  44. */
  45. inline fun <reified VM : ViewModel> Fragment.parentViewModelProvider(
  46. provider: ViewModelProvider.Factory
  47. ) = ViewModelProviders.of(requireParentFragment(), provider).get(VM::class.java)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement