【Jetpack】DataBinding(一):开启数据绑定

QuibblerQuibbler 2020-12-24 约 8 分钟 1939 次阅读

DataBinding:开启数据绑定

记得上大学的那会自学接触过Android,看Android Mars录制的安卓编程视频(网上很火的),印象最深的就是不停的敲findViewById()。现在2020年了还在用findViewById()吗?

1、何为DataBinding?

参考 Guides > Data Binding Library">Android Developers > Guides > Data Binding Library。在此之前相信开发者已经写过无数次的findViewById():

TextView title = findViewById(R.id.title);
    ImageView newsImage = findViewById(R.id.picture);
    TextView author = findViewById(R.id.author);
    TextView category = findViewById(R.id.category);
    TextView date = findViewById(R.id.date);
    Button deleteBtn = findViewById(R.id.delete);
    ....

开始使用DataBinding吧,从重复的劳动中解放出来。

1.1、DataBinding介绍

DataBinding是Jetpack中的支持库,借助该库,可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源,降低布局和逻辑的耦合性,使代码逻辑更加清晰。

DataBinding推出至今也有五年时间了,可是知道的人不多,用的项目就更少了。而且Google的Jetpack组件库还在不断的推出新东西,DataBinding还没过时,又出来个ViewBinding。

1.2、DataBinding的优势

DataBinding数据绑定为MVVM架构而生,优势不言而喻。除了能够减少代码中重复冗余的findViewById,还能:

①移除Activity中的许多界面框架调用

②维护起来更简单方便。

③提高应用性能

④防止内存泄漏

⑤避免发生Null指针异常

2、切换到DataBinding

2.1、启用DataBinding

要启用数据绑定,在模块的build.gradle文件中将dataBinding构建选项设置为true即可:

android {
        ...
        buildFeatures {
            dataBinding true
        }
    }

另一种形式的写法:

android {
        ...
        //启用DataBinding
        dataBinding {
            enabled = true
        }
    }

Kotlin项目开启DataBinding参考Migrate from Kotlin synthetics to Jetpack view binding。既有Kotlin + Java的混合项目坑太多,各种问题。

2.2、修改XML布局

在使用DataBinding之前我们使用的XML布局大都以ViewGroup类型作为根标签:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        ....
    </LinearLayout>

项目中开启DataBinding后,需要稍微改变一下布局,DataBinding布局文件略有不同,以根标记<layout/>开头,后跟<data />元素和 view布局根元素。

如何将布局文件转换成支持DataBinding的布局文件呢?按住Alt + Enter见弹出下面的菜单,选择 Convert  to data binding layout选项:

或者鼠标放在根布局标签处,右键菜单 > Show Context Actions打开上面的菜单:


转换后的布局文件格式如下:

<?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
            //数据
        </data>
        
        //原来的布局根标签整个被移动到这里,成为<layout>的子标签
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </LinearLayout>
        
    </layout>

好了,到这里就已经开启DataBinding之路,继续学习DataBinding的数据绑定语法。

参考资料:

         Libraries > Databinding">Jetpack > Libraries > Databinding

         Guides > Data Binding Library">Android Developers > Guides > Data Binding Library

        GitHub/Android/Databinding Code Sample 

        Data Binding:Get started

        

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w