程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(1)

MVVM架构设计

发布于2021-06-07 21:55     阅读(419)     评论(0)     点赞(2)     收藏(3)


一、环境搭建

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的使用



所属网站分类: 技术文章 > 博客

作者:来呀来呀开心吧

链接:http://www.phpheidong.com/blog/article/89688/325b61772f4dd552c72f/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

2 0
收藏该文
已收藏

评论内容:(最多支持255个字符)