JetPack学习笔记之DataBinding(五)

JetPack学习笔记之DataBinding(五)

使用ObserverField实现数据的双向绑定,即字段变化时,控件中的内容会随之变化,当控制中的内容变化时,字段的值也会相应的变化。

1、编写ViewModel类
/**
 * 项目名称 JetPackPro
 * 创建人 xiaojinli
 * 创建时间 2020/8/7 4:32 PM
 **/
public class LoginModel {
    public String userName;
}
2、编写一个用于存放与实现双向绑定相关的业务逻辑类。
/**
 * 项目名称 JetPackPro
 * 创建人 xiaojinli
 * 创建时间 2020/8/7 4:33 PM
 **/
public class TwoWayBindingViewModel extends BaseObservable {
    private LoginModel loginModel;

    public TwoWayBindingViewModel() {
        loginModel = new LoginModel();
        loginModel.userName = "hello World.";
    }

    @Bindable
    public String getUserName(){
        return loginModel.userName;
    }

    @Bindable
    public void setUserName(String name){
        if(name != null && !name.equals(loginModel.userName)){
            loginModel.userName = name;
            notifyPropertyChanged(BR.userName);
        }
    }
}

注意点有两处,一是在get和set方法上添加@Bindable注解,二是在set方法中判断旧值与新值是否相同,并且在改变旧值时,需要调用notifyPropertyChanged方法。

3、编辑布局文件
        
            
            .....
            
            
            
        
            
  

需要注意的地方是”@“后面加”=“。

5、在Activity中设置变量
        twoWayBindingViewModel = new TwoWayBindingViewModel();
        binding.setLoginModel(twoWayBindingViewModel);

运行之后可测试效果,当在页面中改变EditText中的内容时,set方法会被调用,当调用set方法时,页面中的内容也会随之变化。

你可能感兴趣的:(JetPack学习笔记之DataBinding(五))