Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
2023-03-20 15:18:51 时间
近期将会梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。
本来打算先写DataBinding的使用,没想到在17年的时候已经写过了,这里就补充一点吧,毕竟不是什么新东西
- Android数据绑定技术一,企业级开发
- Android数据绑定技术二,企业级开发
- Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
- Android JetPack~ LiveData (一) 介绍与使用
- Android JetPack~ ViewModel (一) 介绍与使用
目录
- 介绍
- 集成到环境
- 在Activity、Fragment中使用
- BindingAdapter的使用
介绍
DataBinding(数据绑定)发布于2015年的Google I/O大会,旨在减少Android开发中的大量模板代码,增加代码及逻辑清晰度,提高开发效率和维护效率。
它的好处显而易见
- 不用再findViewById(),我们直接可以在xml文件进行属性赋值
- xml中可完成简单的逻辑,如@{ xx==null? a ? b}
- View与逻辑代码解耦性更高,数据与View双向绑定,只需关注数据变化即可
- .....
集成到环境
很早的时候是需要加入依赖的,不过现在只需要更新SDK,下载最新的Android Support库即可。下面依赖仅供参考
配置工程的Gradle
android {
…
dataBinding {
enabled = true
}
}
在Activity、Fragment中使用
使Activity支持DataBinding,在布局的最外层加入”<layout>”标签即可,直接加在最外层,不会影响已有的代码。
acty_jpack_layout.xml这个文件名随便起,但是后面会用到(系统会帮我生成ActyJpackLayoutBinding)
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="ceshi"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
在Activity的onCreate方法中
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//通过databinding 把activity和view绑定
ActyJpackLayoutBinding mBinding = DataBindingUtil.setContentView(this,R.layout.acty_jpack_layout);
}
在Fragment中onCreateView方法中
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = ActyJpackLayoutBinding.inflate(inflater);
return mBinding.getRoot();
}
哦,对了,系统还提供其他的用法比如说,在ViewHolder中
class MyHolder extends RecyclerView.ViewHolder {
MyBinding binding;
MyHolder(View view) {
super(view);
binding = DataBindingUtil.bind(view);
}
}
要获取View的子View可以通过DataBindingUtil.getBinding(sunView);
BindingAdapter的使用
这个方法很好用,使用场景也很广,比如说业务需要页面中按钮需要点击后缩放,抬起后还原。也可以加载图片时用Glide框架去加载,而我们只需要在xml文件中加一行代码就OK了。好处就是复用性极高,如果要优化图片质量,只需要在ImageBindAdapter中修改,用到的地方自然就成修改后的。
public class ImageBindingAdapter {
@BindingAdapter("imageUrl")
public static void imageUrl(ImageView view, String imageUrl){
RequestOptions options =
new RequestOptions()
.centerCrop()
.dontAnimate();
Glide.with(view)
.load(imageUrl)
.apply(options)
.into(view);
}
}
直接在xml文件中使用
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
app:imageUrl="@{bean.img}"
/>
结束!!!
这篇写的很少,主要是之前写过了,有需要可以结合之前两篇。
相关文章
- MongoDB中的高级查询(二)
- MongoDB新增及查询数据(一)
- MongoDB安装及shell简介
- MongoDB基本概念
- MongoDB分片之数据分割方式
- 【从零开始撸一个App】RecyclerView的使用
- 用代码控制网络断开与重连
- 国内“谁”能实现chatgpt,短期穷出的类ChatGPT简评(算法侧角度为主),以及对MOSS、ChatYuan给出简评,一文带你深入了解宏观技术路线。
- 《汇编语言》学习笔记-0
- C基本知识
- FreeRTOS-05-队列
- 热门数据集提供【MNIST、鸢尾花、猫狗、CIFAR10、vegetables、Ox-Flowers17、pascalvoc】
- SHA256/SHA512码计算方式
- 【四】AI Studio 项目详解【VisualDL工具、环境使用说明、脚本任务、(四)图形化任务、在线部署及预测】PARL
- 大小端判断
- 编码测试文件【1】
- 《Qt学习系列笔记》--章节索引
- Qt-数据库操作SQLite
- Qt-udp通信
- [转发]MySQL安装配置教程(超级详细、保姆级)