Android数据绑定教程

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观

这篇文章描述了 Android 中最近推出且仍处于测试版的最有趣的功能之一: Android 数据绑定 。使用数据绑定, 您可以在表示层(应用程序 UI)和包含您要显示的信息的底层数据模型之间创建链接 。 UI 小部件内容(如 TextView、EditText 等)以某种方式绑定到存储在 java 类中的数据。 每次数据变化时,绑定的UI widget都会更新 ,这样你就不用再为自己更新UI而烦恼了。如果应用不使用Android数据绑定,则需要找到视图并更新内容。

设置安卓数据绑定

如前所述,此功能仍处于测试版,因此首先让我们在顶层 build.gradle 中设置正确的依赖项:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

顺便说一下,确保你下载了 gradle 2.4 。现在依赖已经准备好了,是时候修改应用程序中的 build.gradle 了:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

如何使用 Android 数据绑定

现在环境已经准备就绪,可以编写我们的 Android 应用程序 了。例如,我们将创建一个简单的天气应用程序来显示温度和其他信息,在这种情况下要向数据显示应用程序将使用数据绑定。

首先,我们创建布局,这将非常简单,但它包含一些我们应该注意的重要事项:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

作为应用程序 UI 布局的根,有布局,然后声明我们要在布局中使用的变量(第 3-5 行)。声明这些变量很重要,因为它们将在绑定过程中使用。在第 4 行,声明变量 data 是 survivingwithandroid.com.androiddatabinding.model.Data 的类型,其中包含我们要显示的数据。在其他世界中,此类是绑定 UI 的 POJO。在 TextView 小部件中,POJO 类的每个字段的值都绑定到相应的 android:text,因此该值会自动显示。

将变量绑定到对象

现在布局已准备就绪,可以将类字段绑定到 UI 小部件。在 onCreate 方法中,我们以与通常方式不同的方式获取对 Activity 当前布局的引用:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

其中数据定义为:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

请注意,在第 5 行,我们设置了活动布局,然后解析了布局中使用的变量。如果我们以这种方式运行应用程序,我们会注意到 UI 数据仅在开始时更新一次,当绑定到 UI 的底层类字段更改时,UI 不会反映更改。发生这种情况是因为有必要在 UI 和数据字段之间创建一个侦听器。

第一步是我们的 POJO 数据类扩展 BaseObservable:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

现在有必要将单个类字段绑定到 UI,例如温度字段:


 dependencies { 
  classpath "com.android.tools.build:gradle:1.3.0"
  classpath "com.android.databinding:dataBinder:1.+"
}

@Bindable 注解用于在 UI 和字段之间建立引用, notifyPropertyChanged 通知侦听器底层字段已更改,需要更新视图。运行示例,使用 Android 数据绑定 结果是:


结论

正如我们所注意到的 ,Android 数据绑定 是一个非常有趣且强大的功能,它可以简化很多应用程序的构建。无论如何,它仍处于测试版,并且存在一些小问题:例如,即使我尝试使用相同的方式更新 ImageView 并设置资源 ID,它也不起作用。是我的错吗?!!