落花踏尽游何处,笑入胡姬酒肆中。这篇文章主要讲述android dataBinding详解相关的知识,希望能为你提供帮助。
官方介绍地址:
http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html
2015 Google IO 大会带来的 Data Binding 库使得 android 开发者可以方便的实现 MVVM 架构模式。使用DataBinding可以改善应用程序的开发,
使代码更加干净优雅。何为MVVM模式,
其实就是在View和Model层之间多了一层ViewModel,
避免之前MVC模式中View层直接操作Model层,
从而使代码结构更加清晰。有兴趣的可以看看之前转载的一篇关于关于开发模式的介绍:
http://blog.csdn.net/xiangzhihong8/article/details/52671151
今天要介绍的是databining(
数据绑定)
,
对于用这个的好处和坏处我也不多说,
有好处也有坏处:
点击打开链接。
配置环境
默认需要将Android studio升级到1.3(
估计现在大部分都满足)
,
这是因为databinding的build.gradle需要满足最低1.3(
Android Studio 已经内置了对 Android Data Binding 框架的支持)
。使用的时候只需要在build.gradle添加下面的脚本:
dataBinding {
enabled =
true
}
Data Binding 是一个 support 包, 添加完后, 你会发现我们的External Libraries中多了四个aar包:
adapters-1.1定义了一些DataBinding的组件
baseLibrary-2.1.3定义了一些DataBinding的annotation和回调接口
compiler-2.1.3定义了一些用于编译DataBinding的工具类
library-1.1定义了一些Observable基本类型
DataBinding库改变了android传统开发流程中Layout文件的编写方式, 通过ViewModel, 将视图和Model绑定在一起, 你只需要修改Model层的值, 对应的View层就会监听到自动修改自身。( 其实也就是达到了页面和数据的分离)
文章图片
讲了这么多理论的东西, 那么到底怎么使用DataBinding呢?
首先我们需要写一个layout, 不过Data Binding layout的和传统的layout的写法不一样, 起始根标签是 layout, 接下来一个 data 元素以及一个 view 的根元素。这个 view 元素就是你没有使用 Data Binding的layout文件的根元素。
一般在正式写代码的顺序上我们会先定义一个viewmodel类, 如下:
public class UserModel {
privateString firstName;
privateString lastName;
public UserModel(String firstName, String lastName) {
this.firstName =
firstName;
this.lastName =
lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
然后在实现一个布局( 技巧就在这里面) :
<
?xml version=
"
1.0"
encoding=
"
utf-8"
?>
<
layout xmlns:android=
"
http://schemas.android.com/apk/res/android"
>
<
data>
<
variable
name=
"
user"
type=
"
com.xzh.databinding.model.UserModel"
/>
<
/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.firstName}"
/>
<
TextView
android:layout_width=
"
wrap_content"
android:layout_height=
"
wrap_content"
android:text=
"
@
{user.lastName}"
/>
<
/LinearLayout>
<
/layout>
请注意这个layout的文件名, DataBinding会根据这个layout的文件名生成一个xxBinding类, 这个类继承自ViewDataBiding; 如果layout文件名是content_main.xml,则会生成一个ContentMainBinding类, 根据官方解释是自动把layout文件名的下滑线去掉, 然后采用驼峰式的命名规则, 然后再加上Binding后缀。
com.xzh.databinding会根据xml文件的名称 Generate 一个继承自 ViewDataBinding 的类。例如, 这里 xml 的文件名叫 activity_main.xml, 那么生成的类就是 ActivityMainBinding。
最后需要实现通过ViewModel实现View和Model的数据绑定( 常常写在Activity层, 如果项目比较大的话, 建议将网络请求单独分层 ) 。
private void getSearchData(String search) {
binding.progressBar.setVisibility(View.VISIBLE);
MovieHttpManager.searchMovies(search, new MovieHttpManager.IMovieResponse<
List<
Movie>
>
() {
@
Override
public void onData(List<
Movie>
list) {
MovieAdapter mAdapter =
new MovieAdapter(MovieActivity.this, list);
binding.recyclerView.setAdapter(mAdapter);
binding.progressBar.setVisibility(View.GONE);
}
});
}
这里用到的Adapter是RecyclerView.Adapter。不过虽然这种写法比较新颖, 但是对于初学者还是不太容易接受。原理介绍请链接: dataBinding原理大揭秘
源码: 点击打开链接
【android dataBinding详解】
推荐阅读
- android的Drawable详解
- Word2007插入题注技巧之图片题注_Word专区
- Word2007:灵活运用书签技巧准确定位_Word专区
- Word2007:插入交叉引用的设置_Word专区
- 在word2010输入公式符号的窍门_Word专区
- Word2010:添加时间与日期的技巧_Word专区
- Word2010:插入文本框的秘籍_Word专区
- Word2010中对齐方式的详细说明_Word专区
- Word2010中调整段落缩进有何窍门_Word专区