Android数据绑定教程

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

这篇文章描述了 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,它也不起作用。是我的错吗?!!