成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS DataBinding 使用指南

開發(fā) 前端 OpenHarmony
Databinding 顧名思義就是數(shù)據(jù)綁定,HarmonyOS為提供了Databinding庫,該庫允許你使用聲明格式而不是以代碼的方式將數(shù)據(jù)綁定到UI上。

[[413224]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

在開始講DataBinding之前,我們不得不先說一下MVVM架構(gòu)模式,MVVM是MVP模式的改進(jìn)版,Model層跟View層與MVP模式類似,ViewModel層只做和邏輯處理相關(guān)的工作,在ViewModel中不會持有View層的引用,這時候就需要借助DataBinding,通過Binding方式通信,只需要在ViewModel層對數(shù)據(jù)進(jìn)行操作,View層就會自動更新UI。

概述

​ Databinding 顧名思義就是數(shù)據(jù)綁定,HarmonyOS為提供了Databinding庫,該庫允許你使用聲明格式而不是以代碼的方式將數(shù)據(jù)綁定到UI上。Databinding庫會解析布局文件,自動生成數(shù)據(jù)綁定代碼,實現(xiàn)數(shù)據(jù)源與UI組件之間的相互綁定。

​ 自動生成綁定代碼的基類,是用來實現(xiàn)ComponentContainer和ActiveData對象之間的綁定,ComponentContainer是指組件容器,相當(dāng)于Android的ViewGroup,ActiveData是一個可觀察數(shù)據(jù)類,同時也具有生命周期感知,作用類似于Android的LiveData。

​ 當(dāng)ComponentContainer或ActiveData對象被修改時,DataBinding對象會自動修改綁定到ComponentContainer或ActiveData的對象。比如,如果你修改了某個ComponentContainer的屬性,DataBinding會將屬性值到綁定到該ComponentContainer的ActiveData對象。反之亦然,如果一個ActiveData對象的屬性值被更改,綁定的ComponentContainer的屬性值也將被更新。

開始使用

1.在使用DataBinding之前,首先要在應(yīng)用模塊下build.gradle中開啟dataBinding,代碼如下:

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

 2.使用DataBinding之前,首先使用ActiveData對象來定義要觀察的數(shù)據(jù),并實現(xiàn)其0get() 和set()方法:

創(chuàng)建一個Model類

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

 3.在我們的布局文件中,聲明DataBinding的綁定標(biāo)簽,并在中定義剛創(chuàng)建的ActiveData Model類。

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

在<Text>的ohos:text屬性,進(jìn)行數(shù)據(jù)綁定ohos:text=“${model.titile}”

4.在布局中聲明DataBinding后,系統(tǒng)會在編譯后自動生成一個以布局文件命名的Binding類,比如我的布局文件名為ability_main,那么系統(tǒng)就會自動生成一個AbilityMainBinding類。我們在Slice類中調(diào)用DataBindingUtil.createBinding方法來獲取AbilityMainBinding的對象,然后調(diào)用initComponent及setLifecycle來初始化對象,之后我們就可以調(diào)用在ActiveData對象設(shè)置數(shù)據(jù),調(diào)用MainAbilityModel中定義的方法,綁定到其中的ActiveData對象。

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

需要注意的是在調(diào)用DataBindingUtil.createBinding時,要替換成自己的包名。

至此,我們大致的把DataBinding的簡單使用梳理了,總體來說DataBinding可以為我們減少代碼量,也不需要再做findComponentById,設(shè)置數(shù)據(jù)等一些繁瑣的操作。但在實際業(yè)務(wù)開發(fā)當(dāng)中可能也會有一定的局限性,例如ActiveData的類型轉(zhuǎn)換問題,相信后續(xù)官方也會越來越完善,HarmonyOS也會越來越好,讓我們拭目以待。

最終效果

【中軟國際】HarmonyOS DataBinding 使用指南-鴻蒙HarmonyOS技術(shù)社區(qū)

注:DevEco Studio版本過低可能會導(dǎo)致編譯生成Binding找不到包,可升級版本再試。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-09-29 09:07:08

DataGrip數(shù)據(jù)倉庫數(shù)據(jù)庫

2011-07-21 14:57:34

jQuery Mobi

2009-12-28 17:40:10

WPF TextBox

2010-09-06 14:24:28

ppp authent

2012-12-26 12:41:14

Android開發(fā)WebView

2017-01-04 15:22:57

TrimPath模板引擎

2010-08-04 15:37:31

Flex圖表

2010-08-05 15:40:21

FlexBuilder

2010-06-03 17:27:36

Hadoop命令

2009-12-31 17:17:45

Silverlight

2021-01-12 15:19:23

Kubernetes

2025-07-02 09:00:24

ES運維JSON

2010-08-04 14:28:01

Flex組件

2024-02-04 00:00:00

Loki性能查詢

2019-11-13 12:39:26

Python 開發(fā)編程語言

2022-06-23 08:01:36

FlaskSocketIOSwift

2012-05-23 15:46:39

數(shù)字羅盤

2024-01-12 16:12:44

Java虛擬線程開發(fā)

2023-10-25 14:51:38

MySQL數(shù)據(jù)庫JSON

2022-09-23 17:26:04

VeleroKubernetes
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩精品久久久久久 | 青青草网站在线观看 | 亚洲喷水| 国产在线www | 欧美4p | 久久网日本 | 国产色视频网站 | 国产成人a亚洲精品 | 欧美视频在线播放 | 久久久国产一区二区三区 | 亚洲a人 | 久久性 | 国产成人精品综合 | 天天操天天摸天天干 | 国产视频第一页 | 国产精品久久久久一区二区三区 | 精品国产精品国产偷麻豆 | 一级a性色生活片久久毛片波多野 | 欧美日韩一区二区在线观看 | 免费看黄视频网站 | 日日干日日操 | 51ⅴ精品国产91久久久久久 | 国产精品亚洲精品日韩已方 | 密色视频 | 精品一区国产 | 国产精品成人一区二区三区 | 欧美99| 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 日韩成人中文字幕 | 天天操天天怕 | 免费久久久久久 | 欧美韩一区二区三区 | 老妇激情毛片免费 | 91精品午夜窝窝看片 | 亚洲一区二区三区观看 | 九九热这里 | 欧美一区久久 | 免费国产网站 | 中文字幕第5页 | 一区视频 | 精品国产精品国产偷麻豆 |