Android data-binding & RxJava

作者: rain 分类: 移动 发布时间: 2016-10-16 09:52 6 条评论

Tango 公司的开发团队,把 Android Data BindingRxJava 结合到一起。 下面来看看他们是如何使用的。

比如下面是一个按钮中使用的 binding 表达式:

上面使用一个表达式来确定 enabled 的状态。但是上面的表达式虽然可以正常工作,但是还是有些缺陷的:

  1. 无法针对这个表达式编写单元测试
  2. 在其他的 XML 布局文件中无法重用这个表达式
  3. 表达式太复杂了,不太容易理解

因此可以把上面的表达式优化为下面这样:

在 ViewModel 中创建一个类型为 ObservableField 的 helloButtonEnabled 变量,该变量绑定到 View 的enabled 属性。下面是 MainViewModel 类的代码:

注意上面的代码在构造函数中, 使用 combineLatest 把 firstName 和 lastName 组合起来来判断 helloButtonEnabled 的值。如果 firstName 或者 lastName 为 空 则设置按钮不可以点击,并且清空 helloText 的文本。

单元测试也很方便编写:

上面这种方式的好处:

  1. 业务逻辑封装到 ViewModel 中
  2. 业务逻辑可以测试
  3. XML 布局文件可读性更好
  4. 没有重复的代码

下图为示例应用的效果,代码位于 github:https://github.com/TangoAgency/android-data-binding-rxjava

image

如何做到的呢?

上面的代码核心点在于 toObservable 这个函数的实现。该函数使用 ObservableField 的 addOnPropertyChangedCallback 函数把异步回调函数封装为 RxJava 的 Observable。代码如下:

参考 把异步回调操作转换到 RxJava 中 来了解如何封装 Observable。

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=1022

Ɣ回顶部