美文网首页Android之Jetpack篇Android专题
JetPack之DataBinding(数据绑定)用法解析

JetPack之DataBinding(数据绑定)用法解析

作者: 千夜零一 | 来源:发表于2020-10-09 10:20 被阅读0次
JetPack.jpg

介绍

  DataBinding 是google发布的一个数据绑定框架,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。
  实现数据变化自动驱动 UI 刷新的方式有三种:BaseObservableObservableFieldObservableCollection
  ObservableField是继承于 Observable类的类,简单起见可以选择使用 ObservableField。 可以理解为官方对 BaseObservable 中字段的注解和刷新等操作的封装,官方原生提供了对基本数据类型的封装。对 ObservableField属性值的改变都会立即触发 UI 刷新,概念上与Observable 区别不大。


效果预览

DataBinding.gif

具体用法

第一步:在app下的build.gradle中启用DataBinding。

android{
    ...
    dataBinding {
    enabled true
    }
}

第二步:创建实体类Student

com.example.mydemo.entity.Student(包名+类名)

/**
 * @data on 2020/8/27 1:43 PM
 * @auther armstrong
 * @describe  数据绑定示例
 */
public class Student {
    public final ObservableField<String> stuName = new ObservableField<>();
    public final ObservableField<String> stuAge = new ObservableField<>();

    public Student() {
    }
}

解析:其中的ObservableField是一个可以被观察的字段,用来代替传统的字段定义+set,get方法。因为它本身就带有set,get方法。

具体用法:实例化的Student对象.字段名.set/get()即可。具体可见下文第三步。

第三步:在xml布局文件中进行vm视图+数据的绑定。

R.layout.activity_case3(layout布局文件)

<?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>
        <variable
            name="stu"
            type="com.example.mydemo.entity.Student" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff4f4f4"
        android:orientation="vertical"
        tools:context=".show.Case3">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:textSize="20sp"
            android:textColor="@color/white"
            android:text="DataBinding示例"
            tools:ignore="MissingConstraints" />

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="@{stu.stuName}"
            app:layout_constraintTop_toBottomOf="@id/title" />

        <TextView
            android:id="@+id/tv_age"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:text="@{stu.stuAge}"
            app:layout_constraintTop_toBottomOf="@id/tv_name" />

        <Button
            android:id="@+id/btn_changeData"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="改变数据,更新UI"
            app:layout_constraintTop_toBottomOf="@id/tv_age" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

解析:@{stu.stuName}默认会调用类中该字段的get方法。

第四步:在activity中书写业务逻辑代码

/**
 * @data on 2020/8/27 11:30 AM
 * @auther  armstrong
 * @describe DataBinding+ObservableField使用 (单向绑定刷新UI)
 */
public class Case3 extends AppCompatActivity {
    private ActivityCase3Binding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_case3);
        final Student student = new Student();
        student.stuName.set("李白");
        student.stuAge.set("22");
        binding.setStu(student);
        binding.btnChangeData.setOnClickListener((View v)->{
            student.stuName.set("夏侯惇");
            student.stuAge.set("29");
        });
    }
}

双向数据绑定

  双向绑定的意思即为当数据改变时同时使视图刷新,而视图改变时也可以同时改变数据。相比于单向数据绑定,它只多一个"="号。
android:text="@={stu.stuName}"


优缺点

优点:减少了接口数量;告别了繁琐findViewById操作;实现了数据和视图的双向绑定,极大地简化了代码。
缺点:bug难以调试,并且DataBinding目前还存在一些编译问题。


总结

要学好MVVM架构模式,需要先学习好dataBinding和liveData的基础知识。
(1)DataBinding是MVVM数据绑定的工具。
(2)LiveData可以很好的解决MVVM之间的通信问题,并且它可以更好地感知组件的生命周期,能够有效地避免内存泄漏。

相关文章

网友评论

    本文标题:JetPack之DataBinding(数据绑定)用法解析

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