Android-DataBinding入门1 (2)

看下这句代码:binding.getUser().setUserName(binding.etUserName.getText().toString());我们使用dataBinding获取声明过的User对象,然后为其属性userName赋值。看到这里,我们也只是看到更改了数据,没有看到任何更新UI的代码。
不要急,我们接着看一下数据类UserModel的实现就明白了。

package com.ha.cjy.databingdemo.model; import android.databinding.BaseObservable; import android.databinding.Bindable; import com.ha.cjy.databingdemo.BR; /** * 用户 * Created by cjy on 17/12/5. */ public class UserModel extends BaseObservable { /** * 用户名 */ //注解 数据变动更新UI更新 @Bindable private String userName; /** * 手机号码 */ @Bindable private String telPhone; public UserModel() { } public UserModel(String userName, String telPhone) { this.userName = userName; this.telPhone = telPhone; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; //与@Bindable配合使用,数据有更新,通知UI跟着更新 notifyPropertyChanged(BR.userName); } public String getTelPhone() { return telPhone; } public void setTelPhone(String telPhone) { this.telPhone = telPhone; notifyPropertyChanged(BR.telPhone); } }

由上面代码中,我们看到了注解Bindable,这个是用来标识属性是否有变动。官方介绍如下:

The Bindable annotation should be applied to any getter accessor method of an * {@link Observable} class. Bindable will generate a field in the BR class to identify * the field that has changed.

当然了,只是标识属性变动是不够的,这时还是没有通知UI更新的。我们需要使用notifyPropertyChanged方法,告知UI数据变化了从而更新UI。
注意,notifyPropertyChanged方法的参数需要使用BR.属性名才可以。dataBinding在BR类中为对象属性生成了唯一的标识码。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjfpw.html