DataBinding(一)
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<String>"/><variablename="map"type="ObservableMap<String,String>"/>
</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(一)相关推荐
- Android DataBinding 入门了解 到实现一个buttton的点击事件
为了更好的学习mvvm 这里从新学习databinding.... 1 首先在app下面的Gradle 里面的android 里面 添加 dataBinding {enabled = true} 如下 ...
- jpanel不使用jframe保存的图片为空_使用DataBinding还在为数据处理头疼?这篇文章帮你解决问题
前言 在前几年兴起了MVVM架构设计模式,最具有代表的框架就是DataBinding,虽然这种设计架构非常新颖,但是在使用中仍然还有很多痛点,所以我当时觉得短时间这个设计架构可能不会太流行. 最近接手 ...
- databinding学习(1)
2019独角兽企业重金招聘Python工程师标准>>> (1)在工程的gradle中声明 dependencies {classpath 'com.android.tools.bui ...
- Android DataBinding之初体验
(一) 关于DataBinding Google推出DataBinding有一段时间,但是目前来看没有几个人用(尴尬),当然Google推出很多东西都没用户(哈哈),不过作为程序猿 学习这个东西还是很 ...
- DataBinding的双向绑定实现原理
" 悄悄咪咪告诉你,DataBinding是怎么实现双向绑定的" 在讲DataBinding之前,有必要讲讲ViewBinding 1.ViewBinding 1) 配置 要使用V ...
- 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件
报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...
- 【JetPack】数据绑定 DataBinding 简介 ( 使用要求 | Gradle 版本 | 定义数据类 | 定义数据绑定布局 | Activity 数据绑定 | 绑定类生成规则 )
文章目录 I . 数据绑定 简介 II . 数据绑定 使用前提 ( 环境支持 ) III . 数据绑定 使用流程 一 : 启用数据绑定 IV . 数据绑定 使用流程 二 : 定义数据类 V . 数据绑 ...
- Android开发:Kotlin下配置DataBinding
近日,随着Google召开了Google I/O 2017,Kotlin大火一把.因为Google宣布Kotlin为First-class开发语言作 为一名Kotlin忠实粉丝,高兴地很呀.虽然短 时 ...
- Andriod --- JetPack (五):DataBinding + LiveData +ViewModel 简单实例
1.Andriod - JetPack (一):初识 JetPack 2.Andriod - JetPack (二):LifeCycle 的诞生 3.Andriod - JetPack (三):Vie ...
- Android ViewModel+liveData+lifecycle+databinding打造MVVM
Google JetPack 最近google推出JetPack官方架构组件,最近有时间在网上看了很多类似的文章,对ViewModel和lifeCycle有了大概的了解,谷歌意在使用这些组件完成代码解 ...
最新文章
- cxf restful
- 【计算机网络】网络层 : ARP 协议 ( 使用 ARP 协议查找 目的主机 / 路由器 物理地址 )★
- 相同格式EXCEL汇总
- MySQL Schema设计(三)利用Python操作Schema
- bbs mysql_简单BBS程序(需MySQL支持)
- VTK:阴影灯用法实战
- VS2010 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0@VCTargetPath处的属性表达式...
- 20165222第一周查漏补缺
- 这是一个关于软件开发的博客。
- TwinCAT软件编码器参数介绍
- 微信模板消息发送帮助类
- 亚马逊服务器实现代理
- 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
- android mixpanel可视化埋点框架解析
- 我不喜欢代码,却为何坚持做程序员?
- 基本磁盘与动态磁盘 RAID磁盘冗余阵列区分(简单了解各种卷组)
- 《和平精英》新模式,玩法竟跟《使命召唤》和《王牌战士》类似?
- 初识Mongdb之数据查询篇(二)
- 网上流行护眼色的RGB值和颜色代码
- 汽车销售管理系统 c语言版 课程设计,汽车销售管理系统C语言版.doc