HarmonyOS DataBinding 使用指南

系统运维2025-11-05 08:25:3388

想了解更多内容,使用请访问:

和华为官方合作共建的指南鸿蒙技术社区

https://harmonyos.51cto.com

在开始讲DataBinding之前,我们不得不先说一下MVVM架构模式,使用MVVM是指南MVP模式的改进版,Model层跟View层与MVP模式类似,使用ViewModel层只做和逻辑处理相关的指南工作,在ViewModel中不会持有View层的使用引用,这时候就需要借助DataBinding,指南通过Binding方式通信,使用只需要在ViewModel层对数据进行操作,指南View层就会自动更新UI。使用

概述

​ Databinding 顾名思义就是指南数据绑定,HarmonyOS为提供了Databinding库,使用该库允许你使用声明格式而不是指南以代码的方式将数据绑定到UI上。Databinding库会解析布局文件,使用自动生成数据绑定代码,实现数据源与UI组件之间的相互绑定。

​ 自动生成绑定代码的基类,是用来实现ComponentContainer和ActiveData对象之间的绑定,ComponentContainer是指组件容器,相当于Android的云服务器ViewGroup,ActiveData是一个可观察数据类,同时也具有生命周期感知,作用类似于Android的LiveData。

​ 当ComponentContainer或ActiveData对象被修改时,DataBinding对象会自动修改绑定到ComponentContainer或ActiveData的对象。比如,如果你修改了某个ComponentContainer的属性,DataBinding会将属性值到绑定到该ComponentContainer的ActiveData对象。反之亦然,如果一个ActiveData对象的属性值被更改,绑定的ComponentContainer的属性值也将被更新。

开始使用

1.在使用DataBinding之前,首先要在应用模块下build.gradle中开启dataBinding,代码如下:

ohos {     ...     buildTypes {         debug {             dataBindingEnabled true         }     } } 

 2.使用DataBinding之前,首先使用ActiveData对象来定义要观察的数据,并实现其0get() 和set()方法:

创建一个Model类

public class MainAbilityModel {     private ActiveData titile;     public ActiveData getTitile() {         return titile;     }     public void setTitile(ActiveData titile) {         this.titile = titile;     } } 

 3.在我们的布局文件中,声明DataBinding的绑定标签,并在中定义刚创建的ActiveData Model类。

<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout     xmlns:ohos="http://schemas.huawei.com/res/ohos"     ohos:height="match_parent"     ohos:width="match_parent"     ohos:background_element="#1a1a1a"     ohos:orientation="vertical">      <Text         ohos:id="$+id:title_text"         ohos:height="300"         ohos:width="match_parent"         ohos:text="${model.titile}"         ohos:text_alignment="center"         ohos:text_color="#FF555555"         ohos:text_size="50"/>     <....>     <binddata>         <variable             class="com.example.time.model.MainAbilityModel"             name="model"/>     </binddata> </DirectionalLayout> 

在<Text>的ohos:text属性,免费信息发布网进行数据绑定ohos:text=“${model.titile}”

4.在布局中声明DataBinding后,系统会在编译后自动生成一个以布局文件命名的Binding类,比如我的布局文件名为ability_main,那么系统就会自动生成一个AbilityMainBinding类。我们在Slice类中调用DataBindingUtil.createBinding方法来获取AbilityMainBinding的对象,然后调用initComponent及setLifecycle来初始化对象,之后我们就可以调用在ActiveData对象设置数据,调用MainAbilityModel中定义的方法,绑定到其中的ActiveData对象。

public class MainAbilitySlice extends AbilitySlice {     private static HiLogLabel mLabel = new HiLogLabel(HiLog.LOG_APP, 00001, "suisui");     AbilityMainBinding binding;      @Override     public void onStart(Intent intent) {         super.onStart(intent);         ComponentContainer componentContainer =                 (ComponentContainer) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_main, null, false);         if (!(componentContainer instanceof ComponentContainer)) {             return;         }         super.setUIContent(componentContainer);         try {             binding = DataBindingUtil.createBinding(ResourceTable.Layout_ability_main, getContext(), "com.example.time");         } catch (IllegalArgumentException | IOException exception) {             HiLog.info(mLabel, exception.toString());         }         if (binding != null) {             binding.initComponent(componentContainer);             binding.setLifecycle(getLifecycle());             ActiveData price = new ActiveData<>();             price.setData("DataBinding Demo");             MainAbilityModel model = new MainAbilityModel();             model.setTitile(price);             binding.setModel(model);         }     } } 

需要注意的是在调用DataBindingUtil.createBinding时,要替换成自己的包名。

至此,我们大致的把DataBinding的简单使用梳理了,总体来说DataBinding可以为我们减少代码量,也不需要再做findComponentById,设置数据等一些繁琐的操作。但在实际业务开发当中可能也会有一定的局限性,例如ActiveData的类型转换问题,相信后续官方也会越来越完善,HarmonyOS也会越来越好,让我们拭目以待。b2b供应网

最终效果

注:DevEco Studio版本过低可能会导致编译生成Binding找不到包,可升级版本再试。

想了解更多内容,请访问:

和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

-->
本文地址:http://www.bzuk.cn/news/114c32999556.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

如何使用MXKey链接电脑(简单教程助您轻松连接MXKey与电脑)

苹果最新AR/VR头显专利可提供旨在与用户面部舒适贴合的面垫

一日一技:微信开发自定义菜单

Pythonic风格代码有什么好处?附12个代码实例

福克斯特电脑使用教程(轻松掌握福克斯特电脑操作技巧)

太酷了吧,在VS Code上就可以直接读Github代码了

一篇文章教会你Python访问限制那些事儿

Python30岁,先驱:没想到Python这么流行

友情链接

滇ICP备2023006006号-33