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


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

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

    1. Android数据绑定技术一,企业级开发
    2. Android数据绑定技术二,企业级开发
    3. Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用
    4. Android  JetPack~ LiveData (一)   介绍与使用
    5. 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,在布局的最外层加入””标签即可,直接加在最外层,不会影响已有的代码。
    acty_jpack_layout.xml这个文件名随便起,但是后面会用到(系统会帮我生成ActyJpackLayoutBinding)
    "1.0" encoding="utf-8"?>
    
    "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">
        "@+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"/>
    
    
    

     

    在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文件中使用

    "80dp"
        android:layout_height="80dp"
        app:imageUrl="@{bean.img}"
        />

    结束!!!

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

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

  • 相关阅读:
    Json 基于类 Newtonsoft.Json.Linq.JToken 的应用简介【C# 基础】
    LeetCode 0289. 生命游戏
    JavaScript学习笔记01
    随笔
    php错误/异常/日志及常见调试和排错
    静态顺序表及基本操作具体实现
    65. 使用事物码 SAT 查找某个 SAPGUI 事物码操作调用的 Function Module 列表
    广告推荐CTR点击率预测实践项目!
    一文了解Validator库
    Redis数据类型(list\set\zset)
  • 原文地址:https://www.cnblogs.com/cmusketeer/p/17119938.html