元數據綁定系列(一):元數據綁定的使用
閱讀本文之前,建議您先閱讀 Codelabs:元數據綁定框架,讀實之后,跑一下代碼。并且帶著下面幾個問題閱讀。之后,我們一起探討這些問題:
- 元數據綁定的使用步驟,注意事項。
- 什么是元數據綁定?和數據綁定有什么區別?
- 元數據綁定能干什么?
相關推薦:元數據綁定系列(二):元數據綁定進階
元數據綁定的使用步驟,注意事項。
使用步驟我就不復制粘貼了,說一下注意事項:
1.不要忘記注解開關
- ohos {
- compileOptions {
- annotationEnabled true
- }
- }
2.不要忘記初始化
- @MetaDataApplication(requireData = true, exportData = false)
- public class MyApplication extends AbilityPackage {
- @Override
- public void onInitialize() {
- super.onInitialize();
- MetaDataFramework.init(this);
- }
- }
3.Feature中使用 元數據綁定,Json Schema文件必須放在Entry的resource/rawfile.jsonschema路徑下。
4.xml中引用元數據有兩種方式,別搞混
- <request-meta-data>
- <request-meta-data
- name="ClockMetaData"
- schema="com.example.meta-data.alarm"/>
- <using-meta-data>
detail、list_item之類的頁面里。待綁定的數據由上一個頁面傳進來
- <using-meta-data
- name="ClockMetaData"
- schema="com.example.meta-data.alarm"/>
5.Json Schema中的id與 xml布局文件中引用元數據 的schema字段相對應。
- {
- "id": "com.example.meta-data.alarm", //和xml中的schema對應,必須一樣!
- "title": "alarm schema",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "alarm description",
- "type": "object",
- "properties": {
- }
- }
6.在xml中不訪問metaData中的自定義方法時,可以不指定class;否則必須指定。
- <request-meta-data
- name="ClockMetaData"
- class="com.huawei.metadatabindingdemo.alarm.metadata.ClockRowMetaData"/>
7.java代碼中配置元數據(和xml中是等價的)
配置RequestSource
- <request-meta-data
- name="ClockMetaData"
- uri="dataability:///com.huawei.metadatabindingdemo.db.AlarmsDataAbility"/>
- //java代碼中的等價配置:
- MetaDataRequestInfo request = new MetaDataRequestInfo.Builder()
- .setRequestSource("ClockMetaData",
- "dataability:///com.huawei.metadatabindingdemo.db.AlarmsDataAbility")
配置MetaDataClass
- <request-meta-data
- name="ClockMetaData"
- class="com.huawei.metadatabindingdemo.alarm.metadata.ClockRowMetaData"/>
- //java代碼中的等價配置:
- MetaDataRequestInfo request = new MetaDataRequestInfo.Builder()
- .setMetaDataClass("ClockMetaData", ClockRowMetaData.class)
8.待綁定元素必須要有id
9.待綁定字段命名空間要使用metaDataBinding
10.requestBinding()或reBinding()之后才可以調用binding.getLayoutComponent();
什么是元數據綁定?和數據綁定有什么區別?
百度百科中講:“元數據(Metadata),又稱中介數據、中繼數據,為描述數據的數據(data about data),主要是描述數據屬性(property)的信息”
元數據即“描述數據的數據”。那么,我理解的“元數據綁定”應該是通過“元數據”的形式來實現數據綁定。
和“數據綁定”對比
- 定義上:最大的區別就是綁定的對象不一樣,前者綁定“元數據”,后者綁定ActiveData。
- 使用上:元數據綁定是擴展包引入,數據綁定是sdk內置
- 功能上:元數據綁定更強大一些。后者只有單向綁定、雙向綁定的功能。
- 內部實現上:元數據綁定基于APT(Annotation Processing Tool)即注解處理器。數據綁定怎么實現的我也不知道,還請高人告知一二!
元數據綁定能干什么?
單向綁定@{}
- <Text
- metaDataBinding:text="@{ClockMetaData.message}"/>
雙向綁定@={}
- <TextField
- metaDataBinding:text="@={ClockMetaData.message}"/>
綁定自定義函數*{}
- <TextField
- metaDataBinding:text="*{ClockMetaData.getTimeZone(@{ClockMetaData.hour})}"/>
綁定資源文件${}
- <TextField
- metaDataBinding:image_src="${Media_icon_switch_enabled}"/>
點擊事件觸發給元數據賦值#{}
- <TextField
- metaDataBinding:onClick="#{ClockMetaData.enabled = (@{ClockMetaData.enabled} == 1 ? 0 : 1)}"/>