没有合适的资源?快使用搜索试试~ 我知道了~
DataBinding使用详解(一).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2022-05-08
16:25:49
上传
评论
收藏 712KB PDF 举报
温馨提示
试读
11页
精品资料欢迎下载
资源推荐
资源详情
资源评论
DataBinding使⽤详解(⼀)
本⽂介绍了Data Binding的基本⽤法,包括⼀些基本概念、事件的处理及观察者模式的简单应⽤。
简介
Data Binding有很好的灵活性和兼容性,向后兼容⾄Android 2.1(API级别7+)。
为了使⽤Data Binding,需要使⽤Gradle 1.5.0-alpha1+及Android Studio 1.3+。
构建环境
⾸先需要在app module下的build.gradle⽂件下添加data binding的⽀持:
android {
....
dataBinding {
enabled = true
}
}
注意:如果你的app module依赖的类库使⽤了data binding,那你也得在app module中配置data binding。
基础功能
为了使⽤Data Binding,⾸先需要修改布局⽂件,布局⽂件的根元素需要使⽤
<layout>
元素:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable name="user" type="io.github.yuweiguocn.databindingdemo.bean.User"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.age}"
/>
</LinearLayout>
</layout>
当布局⽂件的根元素使⽤
<layout>
元素后,Android Studio就会根据布局⽂件名⾃动⽣成⼀个Binding类,否则不会作处理。默认情况下⽣成的
Binding类名是根据布局⽂件名称⽣成的,⼤写字母开头,移除下划线并⼤写后⾯的字母最后加上“Binding”后缀。这个类会放在module包下
的databinding包下。例如,布局⽂件contact_item.xml会⽣成ContactItemBinding。如果module包名为 com.example.my.app那它会放在
com.example.my.app.databinding包下。这个类控制着布局⽂件中的所有binding,从布局属性(如:variable变量)到布局View及设置绑定表
达式的值。
对于布局中每个设置ID的View会在Binding类中⽣成对应的public final域,⽣成规则为View的ID名⾸字母⼩写,移除下划线并⼤写后⾯的字母。
例如,View ID tv_hello会⽣成tvHello。
对于每个被描述的变量⽣成的binding类会对应有setter和getter。变量会使⽤Java默认值直到setter被调⽤——引⽤类型为null,int为
0,boolean为false,等等。当为了不同的配置(例:横屏或竖屏)有不同的布局⽂件,这些变量会被合并。这些布局⽂件中定义的变量不能有冲
突。
我们可以通过data元素class属性修改Binding类名或放在不同包下。例如:
<data class="ContactItem"> // <data class=".ContactItem">或<data class="com.example.ContactItem">
...
</data>
写在布局⽂件属性中的表达式使⽤“@{}” 语法。TextView的⽂本被设置为了user中的name属性:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
/>
然后来看⼀下User类:
public class User {
public final String name;
public final String age;
public User(String name, String age) {
this.name = name;
this.age = age;
}
}
这个对象的类型数据从不会被改变。在应⽤程序中这是很常见的,数据只读⼀次之后不会被改变。也可以使⽤⼀个JavaBeans对象:
public class User {
public final String name;
public final String age;
public User(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
这两个类对Data Binding来说是相等的。TextView中的text属性user.name值会访问前⾯类的name字段和后⾯类的getName⽅法。另外如果
有name()⽅法也会访问这个。
在Activity的onCreate中,我们需要将setContentView换为DataBinding的⽅式,并且我们需要调⽤Binding类的setter为
<data>
元素下的每
个变量设置相应的对象:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setUser(new User(" 我是姓名","我是年龄"));
没错,就是这么简单,快来看看效果吧:
example.png
你也可以使⽤这种⽅法得到view:
MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater());
View view = binding.getRoot();// 获取对应的View
如果你的ListView或RecyclerView adapter的item使⽤了data binding,你会更喜欢这种⽅法:
剩余10页未读,继续阅读
资源评论
赵鲁宾
- 粉丝: 0
- 资源: 2917
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功