Skip to content

Instantly share code, notes, and snippets.

View lewisevans's full-sized avatar

Lewis Evans lewisevans

  • Chocolate Biscuit Limited
  • London
View GitHub Profile
class MyFragment : BaseFragment<MyViewModel>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = viewModelWith(activity!!)
with(viewModel) {
/*DO SOME STUFF HERE*/
}
}
}
abstract class BaseFragment<VM : BaseViewModel> : DaggerFragment() {
@Inject
internal lateinit var viewModelFactory: ViewModelFactory<VM>
protected lateinit var viewModel: VM
internal inline fun <reified VM : ViewModel> viewModelWith(frag: Fragment): VM =
ViewModelProviders.of(frag, viewModelFactory).get(VM::class.java)
abstract class BaseActivity<VM : BaseViewModel> : DaggerAppCompatActivity() {
@Inject
internal lateinit var viewModelFactory: ViewModelFactory<VM>
protected lateinit var viewModel:VM
internal inline fun <reified VM : ViewModel> viewModelWith(act: FragmentActivity): VM =
ViewModelProviders.of(act, viewModelFactory).get(VM::class.java)
}
class ViewModelFactory <T : ViewModel> @Inject constructor(private val viewModel: Lazy<T>) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T = viewModel.get() as T
}