Android手动挡MVVM
source link: https://jiajunhuang.com/articles/2021_01_02-android_mvvm.md.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Android手动挡MVVM
Android官方的自动档MVVM方案 Jetpack Compose 还没正式发布,目前只有手动挡的MVVM方案,那就是下面几者的组合:
- view binding
- view model
- livedata
- (可选)data binding
我一般就用前三者,因为不喜欢在XML里写一堆的代码。
来对比一下,MVC和手动挡MVVM。首先我们来看看Android开发经典的使用方式,也就是MVC的模式来开发,首先我们要在
XML里画好界面,然后我们需要在各个业务操作逻辑里,写上一大堆的 findViewById
,然后转型成对应的类型。
kotlin-android-extension 解决了这个痛点,但是官方已经放弃维护了,推荐使用view binding。使用这套MVVM方案之后, 代码就会变成这样子:
// ...
super.onCreate(savedInstanceState)
binding = ActivityInvestmentListBinding.inflate(layoutInflater)
setContentView(binding.root)
setUpTopBar(binding.topBar.topBar, getString(R.string.title_investment_list))
// view model
model.isRefreshing.observe(this, {
binding.progressBar.isVisible = it
binding.swipeRefresh.isRefreshing = it
})
// ...
// 初始化数据
model.isRefreshing.value = true
很明显的变化是,设置好了observer以及数据变更之后需要进行的操作之后,逻辑代码就只需要操作model里数据, 而不需要去更新UI。这样子,业务代码只和数据打交道,数据变更之后,会统一去变更UI,极大的降低了复杂页面的 开发难度和维护难度,降低了BUG出现率。
此时,不得不感叹一句,flutter真香!
关注公众号,获得及时更新
Haskell简明教程(五):处理JSON
Haskell简明教程(四):Monoid, Applicative, Monad
OAuth2 为什么需要 Authorization Code?
TCP/IP简明教程 - 从零构建TCP/IP协议(二)连接,断开与拥塞控制
TCP/IP简明教程 - 从零构建TCP/IP协议(这次叫PCT协议)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK