HarmonyOSDataBinding使用指南

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

成都创新互联专业为企业提供漳浦网站建设、漳浦做网站、漳浦网站设计、漳浦网站制作等企业网站建设、网页设计与制作、漳浦企业网站模板建站服务,10多年漳浦做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

https://harmonyos.

在开始讲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,代码如下:

 
 
 
 
  1. ohos {
  2.     ...
  3.     buildTypes {
  4.         debug {
  5.             dataBindingEnabled true
  6.         }
  7.     }
  8. }

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

创建一个Model类

 
 
 
 
  1. public class MainAbilityModel {
  2.     private ActiveData titile;
  3.     public ActiveData getTitile() {
  4.         return titile;
  5.     }
  6.     public void setTitile(ActiveData titile) {
  7.         this.titile = titile;
  8.     }
  9. }

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

 
 
 
 
  1.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  2.     ohos:height="match_parent"
  3.     ohos:width="match_parent"
  4.     ohos:background_element="#1a1a1a"
  5.     ohos:orientation="vertical">
  6.     
  7.         ohos:id="$+id:title_text"
  8.         ohos:height="300"
  9.         ohos:width="match_parent"
  10.         ohos:text="${model.titile}"
  11.         ohos:text_alignment="center"
  12.         ohos:text_color="#FF555555"
  13.         ohos:text_size="50"/>
  14.     <....>
  15.     
  16.         
  17.             class="com.example.time.model.MainAbilityModel"
  18.             name="model"/>
  19.     

的ohos:text属性,进行数据绑定ohos:text=“${model.titile}”

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

 
 
 
 
  1. public class MainAbilitySlice extends AbilitySlice {
  2.     private static HiLogLabel mLabel = new HiLogLabel(HiLog.LOG_APP, 00001, "suisui");
  3.     AbilityMainBinding binding;
  4.     @Override
  5.     public void onStart(Intent intent) {
  6.         super.onStart(intent);
  7.         ComponentContainer componentContainer =
  8.                 (ComponentContainer) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_main, null, false);
  9.         if (!(componentContainer instanceof ComponentContainer)) {
  10.             return;
  11.         }
  12.         super.setUIContent(componentContainer);
  13.         try {
  14.             binding = DataBindingUtil.createBinding(ResourceTable.Layout_ability_main, getContext(), "com.example.time");
  15.         } catch (IllegalArgumentException | IOException exception) {
  16.             HiLog.info(mLabel, exception.toString());
  17.         }
  18.         if (binding != null) {
  19.             binding.initComponent(componentContainer);
  20.             binding.setLifecycle(getLifecycle());
  21.             ActiveData price = new ActiveData<>();
  22.             price.setData("DataBinding Demo");
  23.             MainAbilityModel model = new MainAbilityModel();
  24.             model.setTitile(price);
  25.             binding.setModel(model);
  26.         }
  27.     }
  28. }

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

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

最终效果

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

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

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

https://harmonyos.

网站栏目:HarmonyOSDataBinding使用指南
文章分享:http://www.csdahua.cn/qtweb/news39/519939.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网