Android开发告别findViewById!DataBinding从入门到实战,一篇吃透
Android开发告别findViewByIdDataBinding从入门到实战一篇吃透做Android开发的朋友大概率都被视图绑定和数据赋值的繁琐流程折磨过。写一个简单的页面要先挨个写findViewById绑定控件再手动写set方法给TextView、EditText赋值数据变了还要重新更新UI页面逻辑复杂一点满屏的样板代码不仅写着累还容易出现空指针、控件绑定错误的问题后期维护更是头大。其实Google早就给我们提供了高效解决方案——DataBinding数据绑定库它直接打通数据和视图的壁垒彻底告别冗余代码轻松实现MVVM架构让页面开发又快又稳。今天这篇文章就从零开始带大家吃透DataBinding的基础配置、核心用法、进阶技巧和常见坑新手也能直接上手落地项目一、先搞懂DataBinding到底是什么DataBinding是Google官方推出的支持库属于Android Jetpack组件的核心成员核心作用就是实现数据和UI视图的双向绑定让数据能够直接驱动视图展示视图的变化也能同步回数据模型不用再手动做控件和数据的关联操作。简单来说以前是“代码主动找控件赋值”用了DataBinding之后变成“数据和视图自动关联一变全变”完美适配MVVM架构模式彻底解耦视图层和数据层让代码结构更清晰维护成本大幅降低。二、为什么推荐用DataBinding核心优势全梳理很多新手会觉得只是少写几行代码没必要专门学一个库其实DataBinding的优势远不止于此总结下来这几点最实用彻底告别findViewById杜绝空指针不用再手动绑定控件也不用担心控件ID写错、控件未初始化导致的NullPointerException编译期就会生成对应的绑定类安全又高效。海量样板代码一键精简原本十几行的控件赋值、UI更新代码用绑定表达式一行就能搞定页面逻辑越复杂节省的代码量越可观。视图与数据彻底解耦业务逻辑不用直接操作UI控件数据模型负责存储数据绑定库负责自动同步符合模块化开发理念方便单元测试。支持双向绑定生命周期感知配合LiveData、ViewModel使用能实现数据自动感知生命周期页面销毁自动解绑避免内存泄漏。编译期校验提前规避错误布局里的绑定语法错误编译阶段就会报错不用等到运行时才发现问题大幅提升调试效率。三、快速上手5分钟完成DataBinding配置与基础使用干货来了这部分全程实操跟着步骤走马上就能跑通第一个DataBinding页面新手也能零障碍入门。一项目配置开启DataBinding功能首先要在模块级别的build.gradle文件注意是app目录下的不是项目根目录中启用DataBinding配置如下android { // 其他配置不变 buildFeatures { // 开启DataBinding dataBinding true // 如果同时用ViewBinding也可以一起开启 viewBinding true } }配置完成后点击Sync Now同步项目等待编译完成就可以正常使用DataBinding了低版本的Android Studio写法稍有不同需要添加依赖新版直接用buildFeatures即可。二布局文件改造核心标签要用对DataBinding的布局文件和普通布局不一样根布局必须用标签包裹内部再嵌套原来的布局同时通过标签声明要绑定的数据变量这是最核心的一步。举个实战示例写一个用户信息展示页面?xml version1.0 encodingutf-8?!-- 根布局改为layout标签 --layoutxmlns:androidhttp://schemas.android.com/apk/res/android!-- data标签声明绑定的数据模型和变量名 --data!-- 声明用户数据模型name为自定义变量名 --variablenameuserInfotypecom.xxx.demo.bean.UserBean//data!-- 原来的正常布局放在data标签下方 --LinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:padding16dpTextViewandroid:idid/tv_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{userInfo.userName}android:textSize18sp/TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:text{userInfo.userAge}android:textSize16sp//LinearLayout/layout小贴士绑定数据用 {变量名.属性名} 语法系统会自动匹配Bean类里的get/set方法不用手动调用。三代码层关联获取Binding实例绑定数据布局写完后编译项目会自动生成对应的Binding类命名规则为布局文件名首字母大写 Binding比如布局名叫activity_main.xml生成的类就是ActivityMainBinding。在Activity中使用的代码示例publicclassMainActivityextendsAppCompatActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);// 1. 获取Binding实例替代setContentViewActivityMainBindingbindingDataBindingUtil.setContentView(this,R.layout.activity_main);// 2. 创建数据对象赋值UserBeanuserBeannewUserBean();userBean.setUserName(Android技术博主);userBean.setUserAge(25岁);// 3. 绑定数据到布局UI自动更新binding.setUserInfo(userBean);// 4. 绑定生命周期配合LiveData必加binding.setLifecycleOwner(this);}}运行项目就能看到数据直接展示在控件上完全不用findViewById是不是超简单Fragment中用法稍有区别需要用LayoutInflater加载布局核心逻辑和Activity一致同样是获取Binding实例后绑定数据即可。四、进阶用法项目必用的核心技巧基础用法搞定后这几个进阶技巧是实际开发中高频用到的一定要掌握。一双向绑定数据与视图同步互改基础绑定是单向绑定数据变→视图变而双向绑定能实现视图变→数据同步变最常用在EditText输入框、CheckBox选择框等场景。语法很简单把 {} 改为 {} 即可此时用户在输入框输入内容UserBean里的userName属性会自动同步更新不用再手动监听输入内容大幅简化表单页面开发。二自定义属性绑定BindingAdapter系统自带的绑定属性不够用比如网络图片加载、按钮防抖点击、自定义控件属性赋值都可以通过**BindingAdapter**自定义绑定逻辑实现专属属性绑定。实战给ImageView自定义图片加载绑定配合GlidepublicclassBindingAdapterUtils{// 自定义图片加载属性BindingAdapter(imageUrl)publicstaticvoidloadImage(ImageViewimageView,Stringurl){if(!TextUtils.isEmpty(url)){Glide.with(imageView.getContext()).load(url).into(imageView);}}// 自定义按钮防抖点击BindingAdapter(clickDebounce)publicstaticvoidsetDebounceClick(Viewview,View.OnClickListenerlistener){long[]lastClickTime{0};view.setOnClickListener(v-{if(System.currentTimeMillis()-lastClickTime[0]500){lastClickTime[0]System.currentTimeMillis();listener.onClick(v);}});}}布局中直接使用自定义属性ImageViewandroid:layout_width100dpandroid:layout_height100dpapp:imageUrl{userInfo.avatarUrl}/Buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text提交app:clickDebounce{null}/三配合ViewModelLiveData实现标准MVVMDataBinding和Jetpack的ViewModel、LiveData是黄金搭档能实现生命周期感知数据自动更新彻底告别内存泄漏是目前Android主流的开发模式。核心就是将LiveData对象放入ViewModel布局中直接绑定LiveData再给Binding设置LifecycleOwner数据变化后UI会自动刷新不用手动观察数据。五、避坑指南DataBinding常见问题与解决办法新手使用DataBinding很容易遇到这些问题整理好解决方案直接对照排查Binding类找不到编译报错检查布局根标签是否为是否开启dataBinding清理项目重新编译Build→Clean Project。数据绑定不生效UI不更新检查是否给Binding设置了LifecycleOwnerBean类是否实现Observable接口或用LiveData变量名和属性名是否对应。双向绑定报错确保数据模型有对应的set方法基础数据类型建议用String、包装类避免基本数据类型导致的绑定失败。IDE提示语法错误但能运行Android Studio对DataBinding的语法提示偶尔抽风重启IDE、清除缓存即可解决不影响实际运行。内存泄漏问题必须给Binding设置LifecycleOwner页面销毁时不用手动解绑LiveData会自动感知生命周期。六、最后总结DataBinding作为Android官方推荐的数据绑定工具彻底解决了传统开发中视图与数据耦合严重、样板代码过多的痛点不仅能大幅提升开发效率还能让代码结构更规范适配主流的MVVM架构。对于Android开发者来说DataBinding属于必学技能尤其是做项目开发熟练使用后能明显减少重复劳动降低bug率不管是新手入门还是老手优化项目都非常实用。建议大家看完这篇文章马上动手写一个小demo练手把基础配置和双向绑定、自定义适配器这几个核心点吃透后续配合Jetpack组件做项目就能轻松写出高质量的Android代码啦文末互动你平时开发用DataBinding还是ViewBinding遇到过哪些奇葩问题评论区一起交流
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414169.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!