前言
上篇文章中我们主要讲述了MVVM模式中,ViewModel的封装《Android开发之MVVM模式实践(一):ViewModel的封装》,本篇文章将介绍Activity在MVVM中的封装。
带有DataBinding的Activity基础封装
Google为MVVM模式开发提供了许多不错的工具,DataBinding就是其中一员。DataBinding是Google于2015年在Android Stuido v1.3.0 版本中引入,于2016年4月在Android Studio v2.0.0 上正式支持的。
/**
* @author: Albert Li
* @contact: albertlii@163.com
* @time: 2020/6/12 10:06 AM
* @description: 基于MVVM模式的Activity的基类
* @since: 1.0.0
*/
abstract class BaseBindingActivity<B : ViewDataBinding> : AppCompatActivity(),
ViewBehavior {
protected lateinit var binding: B
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
injectDataBinding()
init(savedInstanceState)
}
protected open fun injectDataBinding() {
binding = DataBindingUtil.setContentView(this, getLayoutId())
binding.lifecycleOwner = this
}
override fun onDestroy() {
super.onDestroy()
binding.unbind()
}
protected abstract @LayoutRes
fun getLayoutId(): Int
/**
* 初始化操作
*/
protected abstract fun init(savedInstanceState: Bundle?)
}
结合DataBinding+ViewModel的Activity封装
/**
* @author: Albert Li
* @contact: albertlii@163.com
* @time: 2020/6/7 10:28 PM
* @description: 基于MVVM模式的Activity的基类
* @since: 1.0.0
*/
abstract class BaseBVMActivity<B : ViewDataBinding, VM : BaseViewModel> : BaseBindingActivity<B>(),
ViewBehavior {
protected lateinit var viewModel: VM
protected fun injectViewModel() {
val vm = createViewModel()
viewModel = ViewModelProvider(this, BaseViewModel.createViewModelFactory(vm))
.get(vm::class.java)
viewModel.application = application
lifecycle.addObserver(viewModel)
}
override fun init(savedInstanceState: Bundle?) {
injectViewModel()
initialize(savedInstanceState)
initInternalObserver()
}
fun getActivityViewModel(): VM {
return viewModel
}
override fun onDestroy() {
super.onDestroy()
binding.unbind()
lifecycle.removeObserver(viewModel)
}
protected fun initInternalObserver() {
viewModel._loadingEvent.observeNonNull(this, {
showLoadingUI(it)
})
viewModel._emptyPageEvent.observeNonNull(this, {
showEmptyUI(it)
})
viewModel._toastEvent.observeNonNull(this, {
showToast(it)
})
viewModel._pageNavigationEvent.observeNonNull(this, {
navigateTo(it)
})
viewModel._backPressEvent.observeNullable(this, {
backPress(it)
})
viewModel._finishPageEvent.observeNullable(this, {
finishPage(it)
})
}
protected abstract fun createViewModel(): VM
/**
* 初始化操作
*/
protected abstract fun initialize(savedInstanceState: Bundle?)
}
代码中的BaseViewModel和ViewBehavior是上一篇文章《Android开发之MVVM模式实践(一):ViewModel的封装》中的内容
Github传送门
https://github.com/albert-lii/Fly-Android
今后文章将同步更新在作者微信公众号中,欢迎关注
微信公众号.jpg
网友评论