MVVM架构设计

一、环境搭建

Data Binding 插件需要Gradle 1.3以上及Android Studio 1.3.

在app目录下的build.gradle文件下android结构中添加下面的语句

	dataBinding {
        enabled true
    }

二、MVVM架构

1) 角色

  1. View:
    对应于Activity和XML,负责View的绘制以及与用户交互

  2. Model
    实体模型

  3. ViewModel
    负责完成View与Model间的交互,负责业务逻辑

2) 数据驱动

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

3) 角色区分

MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具

三、优点

  • 有可重用性
    你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
    在Android中,布局里可以进行一个视图逻辑,并且Model发生变化,View也随着发生变化

  • 低耦合
    以前Activity、Fragment中需要把数据填充到View,还要进行一些视图逻辑。现在这些都可在布局中完成
    甚至都不需要再Activity、Fragment去findViewById。这时候Activity、Fragment只需要做好的逻辑处理就可以了。

四、DataBinding支持的表达式

  1. 数学表达式: + - / * %
  2. 字符串拼接 +
  3. 逻辑表达式 && ||
  4. 位操作符 & | ^
  5. 一元操作符 + - ! ~
  6. 位移操作符 >> >>> <<
  7. 比较操作符 == > < >= <=
  8. instanceof
  9. 分组操作符 ()
  10. 字面量 - character, String, numeric, null
  11. 强转、方法调用
  12. 数组访问 []
  13. 三元操作符 ?
    android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"
    支持dimen,还支持color、string、drawable、anim等
  14. 聚合判断(Null Coalescing Operator)语法 ‘??’
    android:text="@{user.userName ?? user.realName}"
    上面的意思是如果userName为null,则显示realName。
  15. 字符拼接
<TextView  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="@{`username is :`+user.username}"/> 
这里的字符拼接不是用单引号哦,用的是ESC按键下面那个按键按出来的。目前DataBinding中的字符拼接还不支持中文    
  1. 官方手册
    https://developer.android.com/tools/data-binding/guide.html

五、MVVM用法

1. 模板写法

<layout  xmlns:android="http://schemas.android.com/apk/res/android"    >   
         <data>    
                <!--此处定义该布局要用到的数据的名称及类型-->
         </data>
         <!--此处按照常规方式定义要使用的布局,其中可以使用binding表达式代表属性值,所谓binding表达式,指形如"@{user.firstName}"的表达式-->
</layout>

2. 自定义Binding类名(Custom Binding Class Names)

  • 以为根节点布局,android studio默认会自动产生一个Binding类。类名为根据布局名产生,如一个名为activity_simple的布局,它的Binding类为ActivitySimpleBinding,所在包为app_package/databinding。

  • 当然也可以自定义Binding类的名称和包名

<data class="CustomBinding"></data> 在app_package/databinding下生成CustomBinding<data class=".CustomBinding"></data> 在app_package下生成CustomBinding<data class="com.example.CustomBinding"></data> 明确指定包名和类名。

3. Layout布局中Includes 标签使用

 <include layout="@layout/name"
           bind:user="@{user}"/>

4. BaseObservable的方式

  • 使User继承BaseObservable,在get方法上加上注解@Bindable,会在BR(BR类自动生成的)生成该字段标识(int)
    set方法里notifyPropertyChanged(BR.field);
  	@Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }

六、demo示例

MVVMDemo–view和model之间的互传
MVVMDemo—listView的使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值