美文网首页
JetPack学习笔记之DataBinding(五)

JetPack学习笔记之DataBinding(五)

作者: 秀儿2020 | 来源:发表于2020-08-09 08:49 被阅读0次

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、编辑布局文件
        <variable
            name="loginModel"
            type="com.example.jetpackpro.databinding.observerField.TwoWayBindingViewModel" />
            
            .....
            
            
            
        <EditText
            android:id="@+id/username_et"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@={loginModel.userName}"/>
            
  

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

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

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

相关文章

网友评论

      本文标题:JetPack学习笔记之DataBinding(五)

      本文链接:https://www.haomeiwen.com/subject/eatqdktx.html