android mvvm官方demo,Android MVVM实战Demo完全解析

最新

【重大更新说明】

感谢各位读者的阅读,这篇文章由于年代久远,存在一些错误的观点,再次向大家道歉,也做一个技术上的解释说明。

受限于当时的技术水平和网络论调,在那个时代,网上绝大多数人

都认为加了databinding就是mvvm了,实际上不是这样的,MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。

mvvm和MVP有一个比较大的区别是:vm和v是单向引用,activity持有vm引用,vm是不持有view的引用的,所以vm的构造方法中不能传入视图相关的对象。但是我当时的案例中传入了view接口和adapter,这是严重错误的,这样做只能说是MVP+DataBinding。这段代码以及本文的错误示范我做保留,算是给大家一个"错误"的典范。正规的mvvm可以参考real_mvvm 包中的代码

相对规范的mvvm应该这样写

1.mvvm和MVP比较大的区别是:vm和v是单向引用, 只有activity持有vm引用,vm是不持有view的引用的,所以vm的构造方法中不能传入视图相关的对象。之所以要这样,是为了防止生命周期问题导致的内存泄漏。

2.数据驱动。在常规的开发模式中,数据变化需要更新UI的时候,需要先获取UI控件的引用,然后再更新UI。 获取用户的输入和操作也需要通过UI控件的引用。在MVVM中,这些都是通过数据驱动来自动完成的, 数据变化后会自动更新UI,UI的改变也能自动反馈到数据层,数据成为主导因素。这样MVVM层在业务逻辑处理中只要关心数据,不需要直接和UI打交道,在业务处理过程中简单方便很多。

3.mvvm解决了mvp中接口繁杂、内存泄漏等疑难杂症。

4 结合jetpack相关组件,mvvm效果会很好。

在之前的文章中介绍了部分DataBinding框架的使用以及mvvm模式的理论,那今天就通过一个Demo来讲解一下mvvm在实战中的结构是怎么样的,以及它的具体使用,下面一起来看,关于DataBinding和mvvm,还是先贴一下学习地址。

在之前DataBinding的学习中,当然也包括网上大部分关于mvvm和databinding的教程中,都是在xml中引入很多变量,然后把这些变量的数据和控件绑定在一起,这样xml的可读性非常差。实际上正确的做法,是只需要把ViewModel变量引入即可。而且很多也没有讲解如何使用ViewModel。

效果图

demo.gif

项目结构.png

整体架构MVVM,网络请求用的是retrofit2+rxjava2,图片加载用的Glide,列表用的xRecyclerView库

在这里我假设读者已经掌握了DataBinding的用法,还不会的赶紧点击上面的链接学起来,DataBinding是实现mvvm的一种工具,在mvvm项目中的重要性不言而喻,这里我还是再次说明一下各层的作用

1.View层就是展示数据的,以及接收到用户的操作传递给viewModel层,通过dataBinding实现数据与view的单向绑定或双向绑定

2.Model层最重要的作用就是获取数据了,当然不止于此,model层将结果通过接口的形式传递给viewModel层

3.ViewModel 层通过调用model层获取数据,以及业务逻辑的处理。

4.mvvm中 viewModel 和MVP中的presenter 的作用类似 ,只不过是通过 databinding 将数据与ui进行了绑定。

MainActivity的布局很简单,就是一个列表

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools">

你可能感兴趣的:(android,mvvm官方demo)