JetPack-DataBinding 简单使用

1.开启

  dataBinding{
        enabled=true
  }

2.布局和Bean

创建普通布局后,鼠标选中根布局,alt+enter 提示,convert to DataBinding模式,就会如下结构:
data 主要负责描述bean对象。下面是布局结构对象
import导入bean对象的路径
varable 变量标签
name 变量名字
type 变量类型
都很简单,好理解。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data  >
        <import type="com.example.testjetpack.User"/>
        <import type="com.example.testjetpack.ObserveUser"/>
        <variable
            name="user"
            type="User" />
        <variable
            name="user"
            type="ObserveUser" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:textSize="33sp"
            android:layout_height="wrap_content"
            android:text="@{user.name,default=www}"
            tools:ignore="MissingConstraints" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@={user.name}"
            />
    </LinearLayout>
</layout>

3.代码-主界面

代码如何这种结构的xml结构进行关联

布局文件转换为DataBinding的模式后,都会产生一个DataBinding类。规则是布局名称+DataBinding,如activity_main 就会产生ActivityMainBinding.忽略特殊字符。

//  第一种方式
  ActivityMainBinding binding = DataBindingUtil.setContentView(this,
                R.layout.activity_main);

//第二种方式
 ActivityMainBinding inflate = ActivityMainBinding.inflate(getLayoutInflater());

4.单向数据变化更新UI

4.1 实体类继承

改变数据后,调用 notifyChange(); 更新所有字段
notifyPropertyChanged(BR._all); 更新单个字段。

public class User extends BaseObservable {
    private String id;
    private String name;
...set方法
...get方法
   public void setName(String name) {
        this.name = name;
        notifyChange(); //更新所有字段
        notifyPropertyChanged(BR._all);
    }

5.双向绑定

就是数据变化可以通知UI,UI的变化也会更新数据。
最重要的是 android:text="@={user.name}" 多了=符号。

  <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@={user.name}"
            />
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。