Android Jetpack组件DataBinding详解

目录
  • Android之DataBinding
    • DataBinding
    • DataBinding的优势
    • 亮点
    • 使用DataBinding
    • 单向绑定数据
    • 双向绑定

Android之DataBinding

DataBinding

数据绑定

DataBinding的优势

  • 代码更加简洁,可读性会更高。部分和UI控件有关的代码可以在布局文件当中完成。
  • 不需要使用findViewById()方法。
  • 布局文件可以完成简单的业务逻辑处理。

亮点

  • 开发中不需要持有控件的引用
  • 拥有双向绑定的特性
  • 数据与UI同步

使用DataBinding

1、gradle中添加dataBinding

android {
    dataBinding {
        enabled = true
    }
}

2、绑定xml

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    .......................
}

单向绑定数据

定义数据模型

// 单向刷新的第一种方式
public class User extends BaseObservable {

    private String name;
    private String age;

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        // 全量刷新
        notifyChange();
    }

    @Bindable
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
        // 单一刷新
        notifyPropertyChanged(BR.age);
    }
}

编写databingding样式的xml

<?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="user"
            type="com.example.databingding.User" />

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="@{user.age}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="@{user.name}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="改变参数"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </LinearLayout>
</layout>

Activity中使用ViewModel

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("张三", "60");
        mainBinding.setUser(user);
        mainBinding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user.setAge("30");
                user.setName("李思");
            }
        });
    }
}

还有另外一种定义数据的方式,绑定数据方式和上面的相同

// 单向刷新的第二种方式
public class Bean {

    public ObservableField<String> id = new ObservableField<>();

    public ObservableField<String> name = new ObservableField<>();

}

双向绑定

只需要修改一下xml就可以,在@后面加上一个 = 符号

比如:

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@={user.name}" />

附上完整实例代码供参考DataBinding例子代码

(0)

相关推荐

  • Android基础入门之dataBinding的简单使用教程

    目录 前言 1.前期准备 1.1打开dataBinding 1.2修改布局文件 1.3修改Activity方法 2.DataBinding的使用 2.1属性更新 2.2<data>标签 2.2.1简单数据的定义与绑定 2.2.2复杂数据的定义与绑定 2.3事件绑定 2.3.1点击事件绑定 2.3.2点击事件回传数据 2.3.3动态改变对象数据在控件上显示 2.3.4动态改变基本数据在控件上显示 2.4与输入控件结合 2.5与图片控件结合 总结 前言 dataBinding是实现 view 和

  • Android JetPack组件的支持库Databinding详解

    目录 简介 启用databinding 布局xml variable (变量标签) data (数据标签) @{}表达式 绑定普通数据 绑定可观察数据 对单个变量的绑定-fields 对集合的绑定-collections 绑定对象-objects 绑定LiveData 双向绑定 简介 DataBinding 是 Google 在 Jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源.使其维护起来更加方便,架构更明确简介. DataBinding 唯一

  • Android浅析viewBinding和DataBinding

    目录 viewBinding 优点 配置 使用 源码解析 DataBinding 配置 创建实体类 创建布局 创建viewModel dataBinding绑定 viewBinding 优点 当一个页面布局出现多个控件时,使用findViewById去进行控件绑定,过于冗长,且存在NULL指针异常风险.viewBinding直接创建对视图的引用,不存在因控件ID不存在而引发的NULL指针异常.并且在绑定类中对控件添加@NonNull注解 findViewById viewBinding 冗长 简

  • Android开发使用Databinding实现关注功能mvvp

    目录 正文 目标 Modle Presenter 正文 说到关注功能,可能很多小伙伴要说了.谁不会写 但是没有合理的架构,大家写出来的代码很可能是一大堆的复制粘贴.比如十几个页面,都有这个关注按钮.然后,你是不是也要写十几个地方呢 然后修改的时候是不是也要修改十几个地方 我们是否考虑过一下几个问题? 可复用性 (是否重复代码和逻辑过多?) 可扩展性 (比如我这里是关注的人,传userId,下个地方又是文章 articleId) 可读性 冗余代码过多,势必要影响到可读性. 然后再看下自己写的代码,

  • Android DataBinding单向数据绑定深入探究

    目录 一.数据绑定流程 二.建立观察者模式绑定关系 在前面DataBinding原理----布局的加载这篇文章中,我们说明了DataBinding中布局的加载过程,这里继续下一步,数据是如何进行绑定的,这里只介绍单向数据绑定,即数据的变化会反映到控件上:后面再介绍双向数据绑定. 在分析源码之前,在心里要有一个概念就是这里的数据绑定是基于观察者模式来实现的,所以在阅读这部分源码的时候要着重分清楚,谁是观察者谁是被观察者,把这个思想放在心理,这样就能抓住代码的本质. 这一篇分为两个小部分,首先是数据

  • Android DataBinding类关系深入探究

    目录 一.在相应的板块中开启DataBinding 二.DataBing的简单使用 三.生成的xml布局 四.生存的代码 一.在相应的板块中开启DataBinding dataBinding {        enabled true    } 二.DataBing的简单使用 这里写一个简单的布局,如下: <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget

  • Android Jetpack组件支持库DataBinding与ViewModel与LiveData及Room详解

    目录 一.官方推荐的Jetpack架构 二.添加依赖 三.创建Repository 四.创建ViewModel 五.activity中使用 Android Jetpack之ViewModel.LiveData Android Jetpack之LifeCycle 一.官方推荐的Jetpack架构 ViewModel是介于View(视图)和Model(数据模型)之间的中间层,能够使视图和数据分离,又能提供视图和数据之间的通信. LiveData是一个能够在ViewModel中数据发生变化时通知页面刷

  • Android Jetpack组件DataBinding详解

    目录 Android之DataBinding DataBinding DataBinding的优势 亮点 使用DataBinding 单向绑定数据 双向绑定 Android之DataBinding DataBinding 数据绑定 DataBinding的优势 代码更加简洁,可读性会更高.部分和UI控件有关的代码可以在布局文件当中完成. 不需要使用findViewById()方法. 布局文件可以完成简单的业务逻辑处理. 亮点 开发中不需要持有控件的引用 拥有双向绑定的特性 数据与UI同步 使用D

  • Android WebView组件用法详解

    本文实例讲述了Android WebView组件用法.分享给大家供大家参考,具体如下: 如果想WebView能够访问网络,必须在AndroidManifest.xml里面添加权限 <uses-permission android:name="android.permission.INTERNET" /> main.xml很简单,就是一个WebView <?xml version="1.0" encoding="utf-8"?&g

  • Android开发Jetpack组件DataBinding用例详解

    目录 简介 使用方式 1. build.gradle 中添加 kapt,并启用dataBinding 2.修改布局文件,添加 layout 和 data 标签 3.使用 DataBindingUtil 绑定布局 4.布局的 data 标签中添加数据变量,并使用其参数 5.BindingAdapter的使用 简介 DataBinding 是 Jetpack 组件之一,适用于 MVVM 模式开发,也是Google官方推荐使用的组件之一.使用DataBinding可以很容易的达到视图与逻辑分离,直接在

  • Android Jetpack架构组件Lifecycle详解

    前言 Lifecycle是Jetpack架构组件中用来感知生命周期的组件,使用Lifecycles可以帮助我们写出和生命周期相关更简洁更易维护的代码. 生命周期 生命周期这个简单而又重要的知识相信大家早已耳熟能详.假设我们现在有这样一个简单需求: 这个需求只是一个实例,在真实的开发中当然不可能有这样的需要: 在Activity 可见的时候,我们去做一个计数功能,每隔一秒 将计数加1 ,当Activity不可见的时候停止计数,当Activity被销毁的时候 将计数置为0 OK,So easy~ ,

  • Android Jetpack架构组件 ViewModel详解

    前言 前面两篇文章我们已经学习了Lifecycle和DataBind,本篇文章我们来学习Jetpack系列中比较重要的ViewModel,Jetpack的很多很多组件都是搭配使用的,所以单独的知识点可能会有些"无意义"但却是我们项目实战的基础! ViewModel的使用 ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据.ViewModel类让数据可在发生屏幕旋转等配置更改后继续存在.这句话很好理解,还记得我们在讲解Lifecycle的时候 举的例子吗,我们还是使用那

  • Android Jetpack组件ViewModel基本用法详解

    目录 引言 一.概述与作用 二.基本用法 小结 引言 天道好轮回,终于星期五,但是还是忙碌了一天.在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新UI界面,因为我需要知道我是否获取到了实时信息,我想到的办法有三,利用Handler收发消息在子线程与主线程切换从而更新信息,其二则是利用在页面重绘的时候(一般是页面变动如跳转下个页面和将应用切至后台),其三就是利用Jetpack中最重要的组件之一ViewModel,最后我还是选择了ViewModel,因为感觉更方便. 其实想到的前面两个方

  • Android性能优化之RecyclerView分页加载组件功能详解

    目录 引言 1 分页加载组件 1.1 功能定制 1.2 手写分页列表 1.3 生命周期管理 2 github 引言 在Android应用中,列表有着举足轻重的地位,几乎所有的应用都有列表的身影,但是对于列表的交互体验一直是一个大问题.在性能比较好的设备上,列表滑动几乎看不出任何卡顿,但是放在低端机上,卡顿会比较明显,而且列表中经常会伴随图片的加载,卡顿会更加严重,因此本章从手写分页加载组件入手,并对列表卡顿做出对应的优化 1 分页加载组件 为什么要分页加载,通常列表数据存储在服务端会超过100条

  • Android架构发展进化详解

    目录 一.MVC架构 1.概述 2.例子 二.MVP架构 1.概述 2.例子 三.MVVM架构 1.概述 2.例子 四.Clean架构 1.概述 2.例子 五.MVI架构 1.概述 2.例子 六.总结 1.从MVC架构到MVI架构 2.从clean code到clean coder 3.MVI架构之后 一.MVC架构 1.概述 MVC架构是第一个应用于Android开发的成熟架构,由Model.View.Controller三部分组成: Model:负责数据的存储及相关逻辑. View:负责界面

随机推荐