5

Android手动挡MVVM

 3 years ago
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.
neoserver,ios ssh client

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

HTTPS 的详细流程

OAuth2 为什么需要 Authorization Code?

任务队列怎么写?python rq源码阅读与分析

XMonad 配置教程

Haskell简明教程(三):Haskell语法

Haskell简明教程(二):从命令式语言进行抽象

Haskell简明教程(一):从递归说起

2017年必装的VIM插件推荐

TCP/IP简明教程 - 从零构建TCP/IP协议(二)连接,断开与拥塞控制

TCP/IP简明教程 - 从零构建TCP/IP协议(这次叫PCT协议)

Lua Manual 阅读笔记

Golang Map 源码阅读与分析

MySQL 零碎知识 - MySQL必知必会




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK