Skip to content

something about Android Data Binding based on Data Binding Guide

Notifications You must be signed in to change notification settings

codingWhenever/AndroidDataBinding

Repository files navigation

AndroidDataBinding

something about Android Data Binding based on Data Binding Guide

本文是跟着 官网Data Binding Guide 学习过程中得出的一些实践经验,希望对各位有所帮助

1.准备

新建一个 Project,确保 Android 的 Gradle 插件版本不低于 1.5.0-alpha1:

classpath 'com.android.tools.build:gradle:1.5.0' 然后修改对应模块(Module)的 build.gradle:

dataBinding { enabled true } 2.基础

工程创建完成后,我们通过一个最简单的例子来说明 Data Binding 的基本用法。

3.布局文件

使用 Data Binding 之后,xml 的布局文件就不再用于单纯地展示 UI 元素,还需要定义 UI 元素用到的变量。所以,它的根节点不再是一个 ViewGroup,而是变成了 layout,并且新增了一个节点 data。

.... 要实现 MVVM 的 ViewModel 就需要把数据(Model)与 UI(View) 进行绑定,data 节点的作用就像一个桥梁,搭建了 View 和 Model 之间的通路。

我们先在 xml 布局文件的 data 节点中声明一个 variable,这个变量会为 UI 元素提供数据(例如 TextView 的 android:text),然后在 Java 代码中把『后台』数据与这个 variable 进行绑定。

下面我们使用 Data Binding 创建一个展示用户信息的表格。

4.数据对象

新建一个User类,包含name和age属性,很简单;

5.定义 Variable

回到布局文件,在 data 节点中声明一个 User 类型的变量 user。

其中 type 属性就是我们在 Java 文件中定义的 User 类。

当然,data 节点也支持 import,所以上面的代码可以换一种形式来写。

然后我们刚才在 build.gradle 中添加的那个插件 - com.android.databinding 会根据 xml 文件的名称 Generate 一个继承自 ViewDataBinding 的类。 当然,IDE 中看不到这个文件,需要手动去 build 目录下找。

6.绑定 Variable

修改 BasicActivity 的 onCreate 方法,用 DatabindingUtil.setContentView() 来替换掉 setContentView(),然后创建一个 user 对象,通过 binding.setUser(user) 与 variable 进行绑定。

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); user = new User("Test", 28); activityMainBinding.setUser(user); }

7.使用 Variable

数据与 Variable 绑定之后,xml 的 UI 元素就可以直接使用了。

至此,一个简单的数据绑定就完成了;是不是很简单呢;

8.binding events

你可能已经看到了,像普通的写法一样,可以给控件添加点击长按等事件,然后再在MainActivity中定义该方法并实现具体逻辑;其他很多属性都可以这样使用,比如说是tag等

About

something about Android Data Binding based on Data Binding Guide

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages