Android DataBinding之布局include 和 viewStub详解与使用(六)
admin
2024-03-27 19:24:17
0

一、介绍

        前面几章节,我们已系统的学习了布局和数据的绑定,都是涉及到布局和数据的更细部分,这个章节我们依旧介绍一个使用频率很多的两个布局include 和viewStub

二、使用介绍

1、include

                布局导入,在我们开发过程中经常遇到,将一个公共组件view抽取成一个布局,然后用的使用include进来。这样方便我们大家协同开发。如果我们通过databind来管理,这样就很官方。只要我们将数据模块给到include的layout,这样我们就可以不用管理布局里面的,只需要单独处理好数据即可。

1.1、根布局


include子布局:



布局数据交互:

如果在子布局data节点下定义了variable数据类型,那么这个数据就是根布局include的扩展字段

子布局:

              name="name"
            type="ObservableField<String>" />

根布局:bind:name="@{name}"

        数据格式要对应。这样数据就可以绑定关联起来,支持数据单向和双向绑定,在绑定数据的时候,只需要设置好根布局的data数据即可。

2、ViewStub

        ViewStub在大型负责的布局业务开发过程中也常常被用到,即用到再加载,这样可以提升设备性能。减少不需要的内存开销

在Data Binding中,同样也支持ViewStub的绑定

根布局:


待加载布局:



如何加载布局?

var inflatView: View? = null
if (!bind.viewsub.isInflated) {inflatView = bind.viewsub.viewStub?.inflate()!!
}

数据绑定:

        viewstub的数据绑定也是分为两个方法:

1.在布局中直接绑定

也是通过扩展字段映射过去,

  

        这里有个问题,如果的根数据是ObservableField,我们正常是需要在待加载数据也设置成ObservableField,但是,在Impl数据转换的时候,数据被进行了转换,

 

        所以你的在待加载布局中不要单独通过ObservableField接收数据。如果你不会,处理不好,可以通过一个对象来更新。或者用下面第二种方法来处理

2、代码中绑定

我们先把待加载的布局bind出来

var subData = DataBindingUtil.bind(inflatView!!)

ViewSubData:是待加载布局data class。

inflatView:viewStub.inflate的 root

注意:待加载布局还是include的布局,都可以设置class名称,不会影响根布局class的设置

数据绑定:

1.setVariable

subData?.setVariable(BR.user, text)

2.直接设置数据

var name = ObservableField()
subData?.user=name

解释:

        如果你通过代码去设置data,是支持ObservableField的类型,但是在xml布局中,就会被处理转换了。切记,如果你想单向绑定,可以通过代码来设置

setVariable介绍:

        setVariable申请的变量也会在BR中生成对标的flag字段。这个字段和Bindable是一样的,所以你也可以通过设置setVariable,指向申明的字段和对应的数据绑定也是可以的。

三、总结

这样我们就完成了include和ViewStub的介绍与使用,但是ViewStub在数据绑定的时候特别要小心,如果你排查不好xml ViewStub数据绑定,就通过代码去控制

加载完待加载的ViewStub,然后通过代码直接赋值。        

子布局和待加载的布局data都是可以有自己的class name。设置后不会影响根布局的data class的设置。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...