首页 > 其他分享 >Android JetPack~ DataBinding(数据绑定)(一) 集成与使用

Android JetPack~ DataBinding(数据绑定)(一) 集成与使用

时间:2023-02-14 23:22:19浏览次数:57  
标签:JetPack 绑定 DataBinding Android view View

近期将会梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。

本来打算先写DataBinding的使用,没想到在17年的时候已经写过了,这里就补充一点吧,毕竟不是什么新东西

  1. Android数据绑定技术一,企业级开发

  2. Android数据绑定技术二,企业级开发

  3. Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用

  4. Android  JetPack~ ViewModel (一)   使用

目录

  1. 介绍
  2. 集成到环境
  3. 在Activity、Fragment中使用
  4. 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}"
    />

结束!!!

这篇写的很少,主要是之前写过了,有需要可以结合之前两篇。

下篇Android  JetPack~ ViewModel (一)   介绍与使用

标签:JetPack,绑定,DataBinding,Android,view,View
From: https://www.cnblogs.com/cmusketeer/p/17119938.html

相关文章

  • Android使用FFmpeg的API库
    Java可以通过JNI调用原生库中的函数,原生库完全是由原生的CPU指令堆叠起来的,所以运行速度很快。大部分的原生库都是用C/C++编译出来的。因此,Android里面也能通过JNI......
  • Android 中Canvas的save(),saveLayer()和restore()解析
    1、save()方法:用来保存Canvas的状态,save()方法之后的代码,可以调用Canvas的平移、放缩、旋转、裁剪等操作!2、restore()方法:用来恢复Canvas之前保存的状态(可以想成是......
  • unity Android 可后台替换图片
    usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingUnityEngine;usingUnityEngine.Networking;usingUnityEngine.UI;usingUnit......
  • Android 自定义变化的文本控件ColorChangeView
    实例图说明图/***有颜色过渡变化的textview**@ProjectApp_View*@Packagecom.android.view.colortextview*@authorchenlin*@version1.0*@NoteTODO*//*......
  • Android 实现简单的画画版一
    原理:1)首先创建一个创建一张空白图片2)把空白图片设置到imageview控件3)给imageview设置监听,并返回值true;代码如下:/***@描述画板*@项目名称App_Bas......
  • 2023-02-14 Apps targeting Android 12 and higher are required to specify an expli
    新建android项目,选择basicactive一项,在跑模拟器的时候,报错。解决方案:找到AndroidManifest.xml文件,在<activity里面添加一行属性 android:exported="true"详情Gpt给出......
  • Android Fragment的三种应用方式
    应用方式一:动态的使用Fragment首先是,MainActivity的布局文件activity_main.xml,该文件布局文件上面的顶部是一个TitleFragment,是一个静态声明的Fragment。中间也是一个Fr......
  • Android 之 环境搭建
    1.Gradlegradle跟maven一样是一个包管理工具,Android项目默认的包管理工具,这两天使用下来,感觉比maven更加简洁,其他暂时没啥赶脚。1.1配置Javagradle需要java8+1.2......
  • AppsFlyer SDK 接入( Android )
    第1步:声明存储库在Project项目目录的build.gradle文件中,声明mavenCentral存储库://...repositories{mavenCentral()}///...第2步:添加依赖项在Application的build......
  • 2023-02-13 Android studio打包apk到手机上(模拟器也一样)运行时闪退
    环境:Rn项目apk,win10,android手机,as版本为4.2.2。======================================================================================================这是由chatG......