最近在工作中在一个页面使用了 DataBinding ,实践了一下 Databinding 和 LiveData 的结合。今天就来分享一下具体的内容。
上一篇文章https://www.jianshu.com/p/2b715d788423 ,我们介绍了DataBinding以及DataBinding的简单的使用。可以看到,我们上一篇文章只是简单介绍了一下DataBinding,并没有详细介绍如何动态的加载数据。也就是说,这篇文章,我们将介绍,如何使用DataBinding让视图跟随这数据进行刷新变化。
在传统的Android应用开发中,布局文件通常只负责应用界面的布局工作,如果需要实现页面交互就需要调用setContentView()将Activity、fragment和XML布局文件关联起来。然后通过控件的id找到控件,接着在页面中通过代码对控件进行逻辑处理。在这种传统的开发方式中,页面承担了大部分的工作量,大量的逻辑处理需要在Activity、Fragment中进行处理,因此页面显得臃肿不堪,维护起来也很困难,为了减轻页面的工作量,Google提出了DataBiiding(视图绑定)。
在 RecyclerView 中 , 如果要使用 DataBinding 架构组件进行数据绑定 , 首先要 启用 DataBinding , 并 导入 RecyclerView 依赖 , 在 Module 模块下的 build.gradle 构建脚本 中 , 配置如下内容 :
ViewModel 架构组件 是 视图 View 与 数据模型 Model 之间 数据交互的 桥梁 ;
数据绑定 是 通用的编程技术 , 主要作用是 关联 应用的 UI 界面 与 数据模型 ,
在 RecyclerView 中 , 如果要使用DataBinding架构组件进行数据绑定 , 首先要 启用 DataBinding , 并 导入 RecyclerView 依赖 ,
DataBinding 是谷歌最早在2015年官方发布的一个框架,顾名思义即为数据绑定。而推出 DataBinding 的目的就是为了减少繁琐的代码,使代码更加的简洁、可读性更强。随着这几年的发展, DataBinding 日渐成熟,应用愈发的广泛。
使用 Kotlin 实现 MVVM(Model-View-ViewModel)模式是开发 Android 应用程序的一种常见架构方式。MVVM 模式将应用程序的 UI 逻辑和业务逻辑分离,使用 LiveData、ViewModel 和 DataBinding 可以使代码更加模块化和可维护。以下是实现 MVVM 模式的步骤和示例:
如果在 DataBinding 布局 中 , 通过 include 引入了其它布局 , 数据模型对象 需要 绑定到 通过 include 引入的二级页面 布局文件中 ;
如果我们的实体类中star属性为int型,有一个静态全局函数根据传入的star返回一个字符串,那么怎么调用它
将 数据模型 Model 中的 指定 Field 字段 绑定到 View 视图中的组件 ,
Observable接口提供给开发者添加/移除监听者的机制。为了使开发更便捷,我们创建了BaseObservable类,它已经实现了Observable接口中的注册监听者的机制。
Android JetPack是一整套的库,工具和指南。可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。
BindingAdapter 是 DataBinding 数据绑定技术 的组成部分 ;
特别注意 , 其中的下面的组件 , 直接将 age 字段作为值 , 设置到了 text 中 ,
在 Android Studio 中编译执行 Android 工程 , 报如下错误 :
viewModelScope 协程作用域 需要绑定 ViewModel 生命周期 , 在特定界面中 , 如可旋转屏幕的 Activity 界面中 , 如果使用 MainScope 协程作用域 , 当屏幕旋转时 , 就会在 onDestory 生命周期函数中 取消协程作用域 , 此时协程相关的临时数据都被取消了 ;
在上一篇博客中 , 遇到 在 DataBinding 布局 中 , 向 TextView 组件设置 int 类型数据的情况会报错 , 最终的处理方式是 将 int 类型的变量 student.age 通过 String.valueOf 函数转为 字符串 类型 , 设置到 TextView 组件中 ;
DataBinding即数据绑定,可以实现数据和UI的双向绑定。数据改变时,驱动UI刷新;操作UI时,也可以同步给数据。通常在开发界面时,总有findViewById的重复工作,DataBinding可以免去这些操作。同时,DataBinding还可以直接在xml中绑定数据,免去类似setText的操作,让数据来驱动UI刷新。
使用LiveData定义进度属性,并实现下载按钮的点击事件,由于Flow的collect函数为挂起函数,需要使用协程作用域,我们直接使用viewModelScope:
互联网开发模式经历了MVC、MVP。Android本身的开发模式为MVC,前些年MVP大行其道,这两年MVVM逐渐开始流行,最近准备用kotlin开发一个项目,顺便了解一下MVVM。
在移动应用开发中,列表组件是一个非常常见的 UI 组件,绝大多数应用开发中都会使用到列表组件进行界面的开发,在 Android 开发中列表组件一般使用官方提供的 RecyclerView ,而 RecyclerView 的常规开发需要手动创建对应的 Adapter、ViewHolder 代码,且每个 RecyclerView 的使用都需要编写这种的样板代码,存在重复代码,降低了开发效率,于是为了提高列表的开发效率(偷懒)就有了各种对 RecyclerView 封装的框架来简化其开发流程,本篇就是其中一种框架的实现。
Dao,之前我们需要使用异步任务操作Dao,kotlin则可以使用挂起函数,标识使用协程操作:
Flow为上流发射,下流接收,是一对一的,而SharedFlow可以一对多,发射一次,多端接收 效果: 📷 1.定义一个类,来对MutableSharedFlow对象作操作 package com.aruba.flowapplyapplication.common import kotlinx.coroutines.flow.MutableSharedFlow /** * Created by aruba on 2021/9/21. */ object LocalEventBus { val
本文先对Android架构的现有问题进行了分析和讨论,介绍了Jetpack诞生的背景。进而讨论了什么是Jetpack,以及它与AndroidX之间的关系。在对Jetpack有了大致的了解后,我们分别对如何将旧项目迁移至Jetpack,以及如何让新项目支持AndroidX进行了介绍。
DataBinding(数据绑定)发布于2015年的Google I/O大会,旨在减少Android开发中的大量模板代码,增加代码及逻辑清晰度,提高开发效率和维护效率。
StateFlow当值发生变化,就会将值发送出去,下流就可以接收到新值。在某些场景下,StateFlow比LiveData更适用 效果: 📷 1.定义ViewModel StateFlow需要初始值 package com.aruba.flowapplyapplication.viewmodel import android.view.View import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFl
我们以前获取xml中的View,通常通过findViewById但是样板代码太多,而且容易引用错误发生崩溃。
DataBinding 是属于 Jetpack 的一个支持库,可以让你以在布局中声明属性的方式替代编码方式将布局中的 UI 组件和应用数据进行绑定
本文包含Android中MVVM体系中的很多部分,主要对ViewModel+DataBinding+RxJava+LiveData+Lifecycle等笔者所使用的技术体系进行解析.
onCleared方法是ViewModel独有的,当Activity真正退出后,它会调用,而不是销毁后调用,因为旋转屏幕也会调用onDestroy。所以我们可以在这取消网络请求等。平常开发中不做任何操作时,如果有网络请求中,Activity被销毁,那么极有可能请求成功返回结果到activity中造成泄漏等不必要的麻烦。
在前几篇文章中都是讲解关于MVVM框架中各个控件的使用,本篇文章中将使用JetPack中的Hlit组件对项目进行一次解耦。这样我们的MVVM框架会更加的合理
首先感谢这位读者的提议,让我抽出时间细看视图绑定的内容,也打算在项目中使用该功能。当然,还有其他读者提议的内容我已记录,后期有时间也会陆续更新。话不多说,我们开始学习吧!
Android 布局文件通常只负责UI的布局工作,页面通过setContentView()关联布局文件,再通过UI控件的id找到控件,接着在页面中通过代码对控件进行操作,因此,页面承担了很大的工作量.为了减轻页面的工作量,Google推出了DataBinding,使得页面和布局之间的耦合度降低。
Adapter,继承于PagingDataAdapter,和paging2一样需要DiffUtil.ItemCallback:
当业务方的 Java 环境是 1.8 时,如果 SDK 是使用 Java 11 编译,则调用 SDK 相关代码的地方在编译时将会报错:
定义一个实体类,在class上使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里的数据转化为实体类,对于其他我们代码里使用的构造方法,可以使用@Ignore注解表示Room将忽略它,属性也可以使用这个注解,表示这个属性将不会生成数据库字段 使用@PrimaryKey注解指定主键并且是自增长的 属性还可以指定在数据库的字段等,使用@ColumnInfo注解:
1 . 数据绑定作用 : 不使用 Java 代码 , 直接在 layout 布局文件 中完成组件的 文本 , 图片 等数据 的设置 ;
在 Android Studio 中开发 DataBinding , 使用 如下代码开发 绑定适配器 加载网络图片 :
The key must be an application-specific resource id:密钥必须是特定于应用程序的资源id。
通过ViewModel实现的数据共享符合Android的MVC设计模式,将数据独立出来
这句为我们自动注入get()自动获得了UserRepository,然后实例化注入进来
从零开始搭建MVVM架构系列文章(持续更新): Android从零开始搭建MVVM架构(1)————DataBinding Android从零开始搭建MVVM架构(2)————ViewModel Android从零开始搭建MVVM架构(3)————LiveData Android从零开始搭建MVVM架构(4)————Room(从入门到进阶) Android从零开始搭建MVVM架构(5)————Lifecycles Android从零开始搭建MVVM架构(6)————使用玩Android API带你搭建MVVM框架(初级篇) Android从零开始搭建MVVM架构(7) ———— 使用玩Android API带你搭建MVVM框架(终极篇)
嗨,我是写博客满脑子骚东西的哈利迪~今天和大伙聊聊Android中的xml和view的那些事,首先会分析一下xml布局解析inflate的流程,然后会介绍一些业内的方案,如:
PS:上一篇文章写了Databinding的简单使用,写了一个绑定textview的示例,和绑定的一些用法,估计有的人会说,之前的写的好好的,为什么要数据绑定这样的写法呢,没办法,社会在进步,当然是怎么好怎么做了。这篇主要是内容是 数据绑定加载网络图片 数据绑定ListView 自定义适配器(数据绑定通用适配器) item中某一个控件点击事件并刷新定位 先说一下数据绑定加载网络图片和本地图片,图片的载体我们都知道用ImageView,但是如果直接把图片通过set的形式传给xml文件的话,数据绑定是无法
在计算paging的prevKey和nextKey,也就是上一页,下一页的时候,需要考虑PagingConfig中的initialLoadSize参数
领取专属 10元无门槛券
手把手带您无忧上云