DataBinding(一)

准备

再Module下的build.gradle中添加如下:

android{dataBinding{enabled = true}
}

1. 基础

在布局文件中,选中跟布局的ViewGroup,按住alt+回车键,点击“Convert to data binding layout”

由一个layout标签将原布局包裹,data标签用于声明要用到的变量及变量类型。

<data><variablename=""    //用于在布局文件中引用type=""    //类的完整包名  /></data>

如果需要引用多个,可用import导入

<data><import type=""//类的完整包名/><variablename=""type=""/>
</data>

若用import导入的类名相同,可用 alias 指定别名

若布局文件名为activity_main.xml,则会自动生成一个ActivityMainDataBinding类,在onCreate方法中,用 ActivityMainDataBinding binding = DataBindingUtil.setContentView()替换setContentView()方法。

每个数据绑定布局文件都会生成一个绑定类即activity_main.xml会生成一个ActivityMainDataBinding类。

也可以用如下方式自定义类名

<data class=""></data>

2. 单向数据绑定

实现数据变化自动驱动UI刷新的方式有三种

1. BaseObservable

提供了notifyChange()和notifyPropertyChanged()方法,前者会刷新所有值,后者则只会书信对应的BR的值。BR通过@Bindable注解

  • 如果是public修饰的成员变量,则直接在成员变量的上方添加注解@Bindable
  • 如果是private修饰的成员变量,则在其get方法上添加注解@Bindable

2. ObservableField

ObservableField可以理解为官方对BaseObservable中的字段的注解和刷新等操作的封装,官方原生提供了对数据类型的封装。例如:ObservableBoolean,ObservableByte…,也可通过ObservableField泛型声明其他类型。

3. ObservableCollection

提供包装类用于替代原生的List和Map,分别是ObservableList和ObservableMap,当其包含的数据发生变化时,绑定的视图随之更新。

<data><import type="android.databinding.ObservableList"/><import type="android.databinding.ObservableMap"/><variablename = "list"type="ObservableList&lt;String&gt;"/><variablename="map"type="ObservableMap&lt;String,String&gt;"/>
</data>

单向绑定:android:text="@{testInfo.name}"

3. 双向绑定

双向数据绑定的意思即为当数据改变时同时使视图刷新,而试图改变时同时可以改变数据。

android:text="@={testInfo.name}

4. include

当在布局中添加引用布局时

<include layout="" bind:变量名:="@{外层布局中的实例}"/>

不支持include的根布局不是ViewGroup

5.事件绑定

1. 方法引用

在方法引用中,方法的参数与返回值必须与监听器对象的参数相匹配,方法名可以不同。

<EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onTextChanged="@{mainActivity.onChanged}"/>
public void onChanged(CharSequence s, int start, int before, int count) {test.setName(s.toString());}

2. 监听器绑定

而在监听绑定中,只要返回值与监听器对象的预期返回值相匹配即可,可以自己设置参数。

<TextViewandroid:text="@{testInfo.name}"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/textView"android:textSize="36sp"android:textStyle="bold"android:gravity="center"android:onClick="@{()->mainActivity.haha(testInfo.name)}"/>
public void haha(String name){Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
}

DataBinding(一)相关推荐

  1. Android DataBinding 入门了解 到实现一个buttton的点击事件

    为了更好的学习mvvm 这里从新学习databinding.... 1 首先在app下面的Gradle 里面的android 里面 添加 dataBinding {enabled = true} 如下 ...

  2. jpanel不使用jframe保存的图片为空_使用DataBinding还在为数据处理头疼?这篇文章帮你解决问题

    前言 在前几年兴起了MVVM架构设计模式,最具有代表的框架就是DataBinding,虽然这种设计架构非常新颖,但是在使用中仍然还有很多痛点,所以我当时觉得短时间这个设计架构可能不会太流行. 最近接手 ...

  3. databinding学习(1)

    2019独角兽企业重金招聘Python工程师标准>>> (1)在工程的gradle中声明 dependencies {classpath 'com.android.tools.bui ...

  4. Android DataBinding之初体验

    (一) 关于DataBinding Google推出DataBinding有一段时间,但是目前来看没有几个人用(尴尬),当然Google推出很多东西都没用户(哈哈),不过作为程序猿 学习这个东西还是很 ...

  5. DataBinding的双向绑定实现原理

    " 悄悄咪咪告诉你,DataBinding是怎么实现双向绑定的" 在讲DataBinding之前,有必要讲讲ViewBinding 1.ViewBinding 1) 配置 要使用V ...

  6. 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件

    报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...

  7. 【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )

    文章目录 I . 数据绑定 简介 II . 数据绑定 使用前提 ( 环境支持 ) III . 数据绑定 使用流程 一 : 启用数据绑定 IV . 数据绑定 使用流程 二 : 定义数据类 V . 数据绑 ...

  8. Android开发:Kotlin下配置DataBinding

    近日,随着Google召开了Google I/O 2017,Kotlin大火一把.因为Google宣布Kotlin为First-class开发语言作 为一名Kotlin忠实粉丝,高兴地很呀.虽然短 时 ...

  9. Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例

    1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...

  10. Android ViewModel+liveData+lifecycle+databinding打造MVVM

    Google JetPack 最近google推出JetPack官方架构组件,最近有时间在网上看了很多类似的文章,对ViewModel和lifeCycle有了大概的了解,谷歌意在使用这些组件完成代码解 ...

最新文章

  1. cxf restful
  2. 【计算机网络】网络层 : ARP 协议 ( 使用 ARP 协议查找 目的主机 / 路由器 物理地址 )★
  3. 相同格式EXCEL汇总
  4. MySQL Schema设计(三)利用Python操作Schema
  5. bbs mysql_简单BBS程序(需MySQL支持)
  6. VTK:阴影灯用法实战
  7. VS2010 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0@VCTargetPath处的属性表达式...
  8. 20165222第一周查漏补缺
  9. 这是一个关于软件开发的博客。
  10. TwinCAT软件编码器参数介绍
  11. 微信模板消息发送帮助类
  12. 亚马逊服务器实现代理
  13. 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
  14. android mixpanel可视化埋点框架解析
  15. 我不喜欢代码,却为何坚持做程序员?
  16. 基本磁盘与动态磁盘 RAID磁盘冗余阵列区分(简单了解各种卷组)
  17. 《和平精英》新模式,玩法竟跟《使命召唤》和《王牌战士》类似?
  18. 初识Mongdb之数据查询篇(二)
  19. 网上流行护眼色的RGB值和颜色代码
  20. 汽车销售管理系统 c语言版 课程设计,汽车销售管理系统C语言版.doc

热门文章

  1. 化合物纯度、溶剂溶解度检测
  2. 《三国演义》中死不瞑目的十大风流人物
  3. brpc的精华bthread源码剖析
  4. javaweb图片路径问题
  5. Redis在win7下安装步骤
  6. Android DownloadManager下载管理,app更新
  7. 行路难之后,物流业的出路
  8. idea实现注册登录时使用QQ邮箱激活功能
  9. Vue-Watcher观察者源码详解
  10. PMP备考错题集-作业习题二