栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Jetpack学习之DataBinding(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jetpack学习之DataBinding(一)

文章目录
  • 一、 Jetpack是什么
  • 二、架构之Data Binding
    • 1. Data Binding的使用
    • 2. Data Binding绑定数据(单向绑定)
    • 2. Data Binding绑定数据(双向绑定)
    • 4. Data Binding使用总结

一、 Jetpack是什么

百度下都是差不多的说明,我这里结合自己的理解记录下,可能理解的也不是很全面正确。

Jetpack是一套工具库,包含4类组件、分别是架构、界面、行为、基础。(这里不结合代码个人感觉也不太好理解)。因为是一套工具库,可以单独使用,也可以配合使用。每个组件都给用户提供了一个标准,能够帮助开发者遵循最佳做法。(意思就是好用呗)。

这里从copy了一张图,大体了解下:

从图片可以看出,4大类,每种分类下面好多工具,这里学到哪个,通过简单的例子记录下,方便自己理解,如果能帮到其他人,是我的荣幸。

Android也是更新的非常快,有些类和方法已经过时,我这里的环境是AS环境如下,例子中使用的库的版本我都会写出来,方便以后学习使用。


二、架构之Data Binding

Data Biding 位于架构(Architecture)中,(ps:百度翻译是建筑,反正软件是一种工程学,一个意思吧),学的太抽象有时候也不太好理解,暂时都把这个理解成工具库,学习并简单使用,可能写的多了,思想的层次及代码水平会提高。

1. Data Binding的使用

使用DataBinding可以将View和Model中的数据绑定在一块,即可以单向绑定,也可以双向绑定。也不需要再写findViewById这类代码,真香。通过下面的例子简单学习下。

大家都知道使用三方库需要添加依赖,Data Binding作为工具,我们在AS中配置启用就可以使用了。
在当前模块build.gradle配置文件中android节点下添加:

android {
...
    buildFeatures{
        dataBinding = true
    }
...
}

就是这么简单,我们就可以使用了。

要使用Data Binding 需要对Activity和xml中的代码简单修改下。
首先看xml中的布局代码(activity_main.xml):




    

        
    


这里要着重注意下,布局文件要以layout标签作为根标签,里面就可以写我们的布局了。

接着再来看Activity中的代码,

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());
    }
}

这里???,没使用过的时候有点蒙,ActivityMainBinding 这哪来的了?这个其实是DataBinding帮我们生成的类,对应就是(activity_main.xml)文件,用鼠标点进去也是直接跳转的布局文件,仔细看这个布局文件和命名(activity_main)和生成类的名字(ActivityMainBinding),这里是对应关系,首字母大写+(_后面首字母大写)+Binding

这里需要注意下,在setContentView前,我们需要加载这个Binding,所以先调用

mBinding = ActivityMainBinding.inflate(getLayoutInflater())

我理解就是把这个布局加载进来,然后调用setContentView

setContentView(mBinding.getRoot());

这里getRoot()就是这个xml的布局对应的View了。

接着我们就可以使用布局中的控件了

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mBinding.tv.setText("修改文本");
    }
}

直接可以调用到布局中的TextView是不是很方便,这里面只有一个TextView,如果有大量的控件,调用就相当方便了,不用写大量的findViewById。

2. Data Binding绑定数据(单向绑定)

接着我们来绑定一个变量,来看如何使用DataBinding绑定数据

首页xml中需要增加声明一个变量




    
        
    

    
        
        
    


这里注意,我们声明的数据要放到 data标签中, variable 就是声明一个变量,name就是名字,type就是类型。在需要绑定View的地方使用
@{name},相当于控件中的text属性绑定到 data 变量上。

总结下:

使用DataBinding 构建的布局文件中,要以layout作为根标签,如果要绑定数据,数据放到 data 标签中,data标签与 布局根标签并列,大体意思如下


	
		// 声明数据
	
	
	
		// 布局
	

然后再来看Activity中的代码

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mBinding.setData("Hello DataBinding");
    }
}

这里通过mBinding.setData(“Hello DataBinding”);来给TextView设置文本了,这里是不是很有意思了,通过DataBinding,在xml中声明变量绑定到View上,在Activity设置变量,既可实现数据的绑定,注意,这里是一种单向绑定

mBinding.setData("Hello DataBinding");
mBinding.setData("修改变量");

通过以上调用 TextView中显示的文本是“修改变量”,通过修改 data 数据来改变 View 的显示,这是数据与View的单向绑定,如果View发生了变化,那 data 会改变吗?这里验证下:

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mBinding.setData("Hello DataBinding");
        mBinding.setData("修改变量");

        new Handler().postDelayed(() -> {
            mBinding.tv.setText("文本1");
            Toast.makeText(this, mBinding.getData(), Toast.LENGTH_LONG).show();
        }, 2000);
    }
}

在之前的代码基础上,增加了一个延时操作,设置TextView文本,Toast显示之前绑定的变量,这里不贴图了,实际运行效果是,TextView显示的内容变为了 文本1,Toast显示的内容还是之前的 修改变量。这里也证明了,上述使用的是单向绑定,那有没有双向绑定了?有的,DataBinding真是太强大了 yyds。

2. Data Binding绑定数据(双向绑定)

还是在原来的基础上,布局如下:




    
        
    

    

        
    


仔细看,会发现于之前单向绑定是 @{data} ,现在是 @={data}。what?这么简单吗?yes,就是这么简单就实现了~数据和View的双向绑定
再来看Activity中的代码

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mBinding.setData("Hello DataBinding");
        mBinding.setData("修改变量");

        new Handler().postDelayed(() -> {
            mBinding.tv.setText("文本1");
            Toast.makeText(this, mBinding.getData(), Toast.LENGTH_LONG).show();
        }, 2000);
    }
}

还是熟悉的代码,熟悉的味道,这次运行会发现,在延时2s后,TextView的内容变成了 文本1 ,Toast显示的内容也是 文本1,真是太神奇了。
通过DataBinding来实现数据与View的绑定,大大提升了开发效率,首先对于xml中的大量控件不需要findViewById了,可以使用data来绑定View中的属性,这样加载的时候可以显示默认效果,也可以双向绑定,在用户操作后,对应的 data 自动同步,我们就可以直接获取对应的数据,做相应的操作了。更关注于业务本身。

4. Data Binding使用总结

1.需要在build.gradle中配置使用 databinding 来构建项目
2.xml布局文件需要使用layout 标签作为根标签,data 标签来声明数据。需要注意xml文件名对应生成Binding类名对应
3.Activity中的代码需要做修改,来加载对应的Binding类
4.单向绑定使用 @{xxx} ,双向绑定使用 @={xxx}

后记:
这里也是自己理解学习记录,有些地方理解的不对的地方希望大家在评论中指出,后续会接着写JetPack相关的工具使用。谢谢~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号