随着 DataBinding 在项目中使用频率的增加,就越能感觉到 Jetpack 下的这个组件在 Android 开发中所带来的便捷性。DataBinding 不仅在形式上彻底抛弃了传统意义上寻找控件的模版代码,也在本质上防止了控件在使用过程中的空指针、类型转换和内存泄漏等问题,使得开发者可以将更多的精力投入到业务逻辑的开发中。当然,DataBinding 的出现不仅仅是用来解决模版代码的,它还可以将变量和布局中的视图进行关联,同时还可以实现双向数据绑定,既接收对属性的数据更改,又监听用户对此属性的更新。
毫无疑问,DataBinding 已经在一定程度上改变了你的开发习惯。比如,你可能更习惯于在布局文件中使用 @{onClickListener}
来为一个控件添加点击事件;再比如,你可能更喜欢在布局文件中使用表达式 @{viewmodel.username}
来为一个 TextView 进行赋值。没错,你也会更倾向于采用同样的方法为 EditText 添加一个文字改变监听器。但事实上,DataBinding 是不支持直接为 EditText 添加文字改变监听器的,我们需要依赖 ViewModel 持有一个 TextWatcher 的实例并将其绑定到 EditText 上来进行实现。
EditText 实现文字改变的监听大致分为三步:一、定义持有 TextWatcher 实例的 ViewModel;二、布局文件引用 ViewModel;三、Activity 调用。伪代码如下,如需访问完整代码请访问 Watcher@Gitee。
1. ViewModel 代码
1 | public class WatcherViewModel extends ViewModel { |
2. XML 代码
1 |
|
3. Activity 调用
1 | public class WatcherActivity extends AppCompatActivity { |