Android Data Binding初次使用
2015-09-15 16:38
465 查看
Data Binding
Data Binding即数据绑定,Data Binding 库实现在布局文件中实现数据绑定申明,使数据的变化引起视图的自动更新,减少了逻辑代码,在Android中可以很方便的实现MVVM的开发模式
最近看到网上和群里各种MVVM,带着兴趣简单的了解了下,初次使用,各种问题,在这里总结下。
请确保您使用的是 Android Studio 的兼容版本。Android Studio的Data Binding 插件需要 Android Studio 1.3.0-beta1 或更高版本,我用的是1.3.2。
很多人介绍的是
然后确保jcenter在repositories列表里,如下:
在每一个你想要使用Data Binding的module,添加如下的插件:
但是我项目里就各种报错,就是gradle选的更高版本1.3也还是报错,然后找了找可以用dataBinder:1.0-rc1,然后我就改成了如下这样,并且成功了
系统默认创建的带android:layout_width和android:layout_height两个属性,事实证明如果layout有这两个属性是编译不通过的,得删掉。
Data Binding layout文件有点不同的是:起始根标签是 layout,接下来一个 data 元素以及一个 view 的根元素。这个 view 元素就是你没有使用Data Binding的layout文件的根元素,举例说明:
在layout的属性表达式写作@{},下面是一个TextView的text设置为user的firstName属性
在 data 内描述了一个名为user的变量属性,使其可以在这个layout中使用,UserBean对象如下:
在layout中我们通过@{user.name}调用name知道给textview设置值,通过@{user.num}来调用num字段赋值,这里的UserBean的name和num虽然创建方式不一样,但是调用方式都是相同的,这两种方式是等价的。
通过@{@string/hello_world + String.valueOf(user.age) }这句我们可以发现,可以调用我们创建的color string等资源文件,还有就是因为age字段是整形,所以直接赋值的话肯定会报错,我们这里可以用String.value给转下型。
这样就可以达到效果了,你要对界面显示进行操作。只需要针对这个实例进行操作就OK了,感觉确实很方便,但是这里说一句,data binding没有代码自动补全,这点太恶心了。
Data Binding即数据绑定,Data Binding 库实现在布局文件中实现数据绑定申明,使数据的变化引起视图的自动更新,减少了逻辑代码,在Android中可以很方便的实现MVVM的开发模式
最近看到网上和群里各种MVVM,带着兴趣简单的了解了下,初次使用,各种问题,在这里总结下。
1、构建环境
要开始使用Data Binding,首先需要在Android SDK Manager的支持库里下载该库请确保您使用的是 Android Studio 的兼容版本。Android Studio的Data Binding 插件需要 Android Studio 1.3.0-beta1 或更高版本,我用的是1.3.2。
2、工作环境
你的app要使用Data Binding,需要添加Data Binding到gradle构建文件里,如下:很多人介绍的是
dependencies { classpath "com.android.tools.build:gradle:1.2.3" classpath "com.android.databinding:dataBinder:1.0-rc0" }
然后确保jcenter在repositories列表里,如下:
allprojects { repositories { jcenter() } }
在每一个你想要使用Data Binding的module,添加如下的插件:
apply plugin: ‘com.android.application' apply plugin: 'com.android.databinding'
但是我项目里就各种报错,就是gradle选的更高版本1.3也还是报错,然后找了找可以用dataBinder:1.0-rc1,然后我就改成了如下这样,并且成功了
classpath 'com.android.tools.build:gradle:1.3.0' classpath "com.android.databinding:dataBinder:1.0-rc1"
3.Data Binding Layout 文件
穿件文件这里再次遇到了问题,我是new–>Layout Resource File然后在Root element里面选择的layout,这样创建的文件是这样的格式<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> </layout>
系统默认创建的带android:layout_width和android:layout_height两个属性,事实证明如果layout有这两个属性是编译不通过的,得删掉。
Data Binding layout文件有点不同的是:起始根标签是 layout,接下来一个 data 元素以及一个 view 的根元素。这个 view 元素就是你没有使用Data Binding的layout文件的根元素,举例说明:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.leju.myapplication.UserBean" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" 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.num}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{@string/hello_world + String.valueOf(user.age) }"/> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </layout>
在layout的属性表达式写作@{},下面是一个TextView的text设置为user的firstName属性
在 data 内描述了一个名为user的变量属性,使其可以在这个layout中使用,UserBean对象如下:
public class UserBean { public final String name; private String num; private int age; public UserBean(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
在layout中我们通过@{user.name}调用name知道给textview设置值,通过@{user.num}来调用num字段赋值,这里的UserBean的name和num虽然创建方式不一样,但是调用方式都是相同的,这两种方式是等价的。
通过@{@string/hello_world + String.valueOf(user.age) }这句我们可以发现,可以调用我们创建的color string等资源文件,还有就是因为age字段是整形,所以直接赋值的话肯定会报错,我们这里可以用String.value给转下型。
4、绑定数据
layout和bean对象都创建成功之后我们将要在activity中显示了,代码如下:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityTestBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_test); UserBean userBean = new UserBean("hello"); userBean.setNum("123"); userBean.setAge(12345); binding.setUser(userBean); //在layout中对控件设置id,可以根据id名直接获取控件 binding.imageview.setImageResource(R.mipmap.ic_launcher); }
这样就可以达到效果了,你要对界面显示进行操作。只需要针对这个实例进行操作就OK了,感觉确实很方便,但是这里说一句,data binding没有代码自动补全,这点太恶心了。
相关文章推荐
- 我眼中的Android IDE
- android设备的适配
- Android--Service中添加 浮动 View
- Android Studio使用新的Gradle构建工具配置NDK环境
- Android ORM系列之GreenDao自定义类型转换器与代码混淆配置
- Android 手动显示和隐藏软键盘
- android 该项目的优化toast优化技巧
- android应用基础--由官方帮助文件翻译
- Android_开启应用
- Android学习之浏览pdf文档
- Android:clipChildren属性
- 不容错过!开发者必备的十二大Android开发资源
- Android, 基本控件的使用
- 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
- android中的日志工具Log
- Android Monkey之script脚本
- Android开发 打开文件 选择文件对话框
- Android应用打破65K方法数限制
- Android 使用LeakCanary 检测内存泄露
- Android 支付宝钱包手势password裂纹战斗