Android Data Binding Library(一):基本使用方法

Data Binding Library是一个support library,它可以减少编程中绑定业务逻辑和布局的一些粘合代码。该库支持的sdk版本是Android 2.1 (API level 7+)及以上,同时要求Android Studio的gradle插件版本在1.5.0-alpha1及以上。

目前演示使用的Android Studio版本为3.0,gradle插件版本2.3.3,gradle版本gradle-4.0-milestone-1-all。

构建环境

在需要使用Data Binding Library的module,在其build.gradle中添加如下代码:

android {
    ....
    dataBinding {
        enabled = true
    }
}

注: 如果一个app module的依赖库中使用了data binding,那么该module必须在build.gradle中配置data binding

布局文件

参考官方文档,第一个data binding的布局文件示例如下:



   
       
   
   
       
       
   

Data-binding布局文件和常规的布局文件有些微区别。它的根标签是layout,data元素和view根元素紧跟其后。其中view元素就是在non-binding布局文件中的根元素。
上例中data元素中的user变量,描述了一个在布局中会使用到的属性。layout中使用"@{}" 来对属性赋值,eg,示例中的TextView的文本被user的firstName属性赋值。

数据对象

可以采用以下两种写法。
第一种

// a plain-old Java object (POJO) for User:
public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

第二种

public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}

以上两种方法是等价的,布局文件中的表达式@{user.firstName} 将会访问第一种方法的firstName域以及第二种方法的getFirstName()方法。第二种方法中也可以firstName()方法来代替getFirstName()方法

绑定数据

默认情况下,将会根据布局文件的名称来生成绑定类,将名称转为Pascal命名法并以Binding结尾。示例中布局文件名为main_activity.xml,则生成类名为MainActivityBinding。该类中保存了布局属性 (e.g. the user variable)到布局Views的绑定关系,并了解如何对绑定表达式赋值。

最简单的创建绑定的方式如下,后续即可运行看绑定效果。

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}

另一种绑定方法如下:

MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater());

如果在ListView或RecyclerView的适配器中使用data binding,可以使用以下两种方法:

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

后续会继续写博客介绍事件处理,敬请关注!

你可能感兴趣的:(Android Data Binding Library(一):基本使用方法)