国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鴻蒙開發(fā)(四)UIAbility和Page交互

這篇具有很好參考價值的文章主要介紹了鴻蒙開發(fā)(四)UIAbility和Page交互。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? 通過上一篇的學(xué)習(xí),相信大家對UIAbility已經(jīng)有了初步的認(rèn)知。在上篇中,我們最后實現(xiàn)了一個小demo,從一個UIAbility調(diào)起了另外一個UIAbility。當(dāng)時我提到過,暫不實現(xiàn)比如點擊EntryAbility中的控件去觸發(fā)跳轉(zhuǎn),而是在EntryAbility加載完后直接打開FuncUIAbility。本篇,帶著大家一起學(xué)習(xí)下UIAbility和Page之間的交互。

鴻蒙系列的上一篇:???????鴻蒙開發(fā)(三)探索UIAbility-CSDN博客文章瀏覽閱讀526次,點贊9次,收藏9次。前文提到過,在使用DevEco創(chuàng)建鴻蒙項目的時候,會選擇Empty Ability,那么這個Ability是什么呢?其實對比Android Studio創(chuàng)建Android項目時選擇的Empty Activity,感覺Harmony的Ability更像是Android的Activity,但只能說像,不完全等同。本篇,我們就基于API9一起探索下Ability。因為本人是Android開發(fā)者,所以文章中會時不時的跟Android對比,如果你也是Android開發(fā)者 ,那么理解起來應(yīng)該不難。https://blog.csdn.net/qq_21154101/article/details/135595700?spm=1001.2014.3001.5501

目錄

一、溫故而知新

二、UIAbility和Page交互

1、使用EventHub

2、globalThis

三、Demo效果展示


一、溫故而知新

? ? 在學(xué)習(xí)UIAbility和Page之間的交互之前,我們先回顧下已掌握的知識:

1、UIAbility是如何創(chuàng)建的?

2、Page是如何創(chuàng)建的?

3、UIAbility是如何跟Page綁定的?

4、UIAbility是如何跟另一個UIAbility交互的?

? ? 如果以上四個問題你還不了解或者不是很清楚,可以參考下我的上一篇文章。如果都很清楚了,那么本篇跟著我一起實現(xiàn)這樣一個demo。要求如下:

1、實現(xiàn)2個UIAbility,分別為EntryUIAbility和FuncUIAbility,對應(yīng)有兩個Page,分別為Index和Func。

2、Index頁面里面有一個Hello Harmony的Text控件,為其增加點擊事件,點擊后傳遞一個內(nèi)容為"Welcome to Harmony"的msg給與其綁定的EntryUIAbility。

3、EntryUIAbility收到點擊事件后,調(diào)起FuncUIAbility。

4、FuncUIAbility將msg傳遞給與其綁定的Func頁面。

5、Func頁面接受到msg后,將其展現(xiàn)在該頁面的一個Text控件中。

? ? 好了,需求就是這樣,是不是非常簡單呢?接下來,我們一起手把手實現(xiàn)下!

二、UIAbility和Page交互

? ? 在正式動手之前,我們先思考下如何實現(xiàn)?如果你做過Android,你該知道實現(xiàn)點擊事件非常簡單。拋開mvp和mvvm的架構(gòu),我們完全可以在Activity中對控件添加點擊事件,然后調(diào)起另外一個Activity即可。在鴻蒙中,不能這么去做,因為UIAbility和Page其實是分離的。鴻蒙給我們提供了兩種方式,來實現(xiàn)UIAbility組件與Page之間的交互。

  • 使用EventHub進(jìn)行數(shù)據(jù)通信:基于發(fā)布訂閱模式來實現(xiàn),事件需要先訂閱后發(fā)布,訂閱者收到消息后進(jìn)行處理。
  • 使用globalThis進(jìn)行數(shù)據(jù)同步:ArkTS引擎實例內(nèi)部的一個全局對象,在ArkTS引擎實例內(nèi)部都能訪問。

? ? EventHub是以Ability組件為中心,目前只發(fā)現(xiàn)它適用于將Ability作為事件的訂閱者,而Page作為事件的發(fā)布者。也就是Page到Ability的單方通信。globalThis是一個全局的對象,不管是Ability或是Page均可以雙向通信。準(zhǔn)確來講,不應(yīng)該叫做通信,應(yīng)該叫做讀取。

1、使用EventHub

? ? EventHub提供了Ability組件(UIAbility和ExtensionAbility)的事件機(jī)制,以Ability組件為中心提供了訂閱、取消訂閱和觸發(fā)事件的數(shù)據(jù)通信能力。這個其實就類似Android的EventBus,不過多介紹。

(1)既然要使用EventHub,那么首先就是獲取一個EventHub實例。可以在EntryUIAbility的onCreate方法通過context去獲?。?/p>

  onCreate(want, launchParam) {
    hilog.info(0x0000, this.tag, 'Ability onCreate');
    // 獲取eventHub
    let eventhub = this.context.eventHub;
    ...
  }

(2)接下來,在EntryUIAbility的onCreate中去注冊EventHub,并在收到事件的時候調(diào)起FuncUIAbility,同時傳遞數(shù)據(jù)data:

onCreate(want, launchParam) {
    hilog.info(0x0000, this.tag, 'Ability onCreate');
    // 獲取eventHub
    let eventhub = this.context.eventHub;
    // 執(zhí)行訂閱操作
    eventhub.on(this.event1, (...data) => {
      // 觸發(fā)事件,完成相應(yīng)的業(yè)務(wù)操作
      if (data != null && data.length > 0) {
        this.openFuncUiAbility(data[0]);
      }
      hilog.info(0x0000, this.tag, data.toString());
    });
  }

注意:data為可變參數(shù),類型為數(shù)組,因此需要判空判斷l(xiāng)ength然后按照數(shù)組的方式使用index獲取參數(shù)。

(3)實現(xiàn)openFuncUiAbility()方法,接收參數(shù)message,并且在調(diào)起FuncUIAbility時把message作為want的info參數(shù)帶過去:

  openFuncUiAbility(message) {
    let info = message
    // 調(diào)起app內(nèi)其他的UIAbility
    let want: Want = {
      deviceId: '', // deviceId為空表示本設(shè)備
      bundleName: 'com.example.tuduharmonydemo', // 必填
      moduleName: '', // moduleName為空表示本模塊
      abilityName: 'FuncAbility', // 必填
      parameters: { // 自定義信息
        info: info
      }
    }
    this.context.startAbility(want).then(() => {
      hilog.info(0x0000, this.tag, 'Succeeded in starting ability.');
    }).catch((err) => {
      hilog.error(0x0000, this.tag, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
    })
  }

注意:want的參數(shù)是一個json,可以塞多個參數(shù),暫時用不到。

(4)在Index頁面中實現(xiàn)onClick點擊事件,調(diào)用eventHubFunc方法去觸發(fā)事件:

@Entry
@Component
struct Index {
  @State message: string = 'Hello Harmony'
  private context = getContext(this) as common.UIAbilityContext

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .onClick(() => {
            this.eventHubFunc()
          })
      }
      .width('100%')
    }
    .height('100%')
  }

(5)實現(xiàn)eventHubFunc方法,在Page中通過eventHub.emit()觸發(fā)事件,可以根據(jù)需要傳入0或多個參數(shù):

eventHubFunc() {
    // 不帶參數(shù)觸發(fā)自定義“event1”事件
    this.context.eventHub.emit('event1')
    // 帶1個參數(shù)觸發(fā)自定義“event1”事件
    this.context.eventHub.emit('event1', 'Welcome to Harmony')    // 在本次需求中,我們使用傳遞一個參數(shù)即可
    // 帶2個參數(shù)觸發(fā)自定義“event1”事件
    this.context.eventHub.emit('event1', 1, '222')
    // 開發(fā)者可以根據(jù)實際的業(yè)務(wù)場景設(shè)計事件傳遞的參數(shù)
  }

? ? 上面提到過,eventHub傳遞的參數(shù)為可變參數(shù),類型為數(shù)組,在這里貼一下emit的源碼,可以看到為Object[]數(shù)組:

    /**
     * Trigger the event callbacks.
     * @param { string } event - Indicates the event.
     * @param { Object[] } args - Indicates the callback arguments.
     * @throws { BusinessError } 401 - If the input parameter is not valid parameter.
     * @syscap SystemCapability.Ability.AbilityRuntime.Core
     * @StageModelOnly
     * @since 9
     */
    emit(event: string, ...args: Object[]): void;

? ? 這樣,已經(jīng)實現(xiàn)了我們前面所列需求的第1-3個。第4-5個,我們需要借助上文提到的第二種方式globalThis實現(xiàn)。

2、globalThis

? ? globalThis是ArkTS引擎實例內(nèi)部的一個全局對象,引擎內(nèi)部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局對象進(jìn)行數(shù)據(jù)同步。如下圖:

鴻蒙開發(fā)(四)UIAbility和Page交互,鴻蒙,harmonyos,交互,華為

? ? 那么接下來,我們一起基于globalThis來實現(xiàn)第4-5個需求吧。

(1)在FuncUIAbility的onCreate中使用globalThis接收want里面的參數(shù)info:

  onCreate(want, launchParam) {
    let info = want?.parameters?.info;
    globalThis.entryAbilityInfo = info;
    hilog.info(0x0000, 'testTag', info);
  }

(2)在Func頁面中,實現(xiàn)aboutToAppear,這是在調(diào)用build進(jìn)行展現(xiàn)之前的函數(shù),在這里通過globalThis獲取參數(shù),同時賦值給message,然后在build方法中展現(xiàn)message:

import hilog from '@ohos.hilog'
@Entry
@Component
struct Func {
  @State message: string = 'Func Page'

  aboutToAppear(){
    this.message = globalThis.entryAbilityInfo
    hilog.info(0x0000, 'TTTT', this.message?? '');
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
      }
      .width('100%')
    }
    .height('100%')
  }
}

三、Demo效果展示

? ? 至此,理論上我們已經(jīng)一步步實現(xiàn)了篇首提出的需求:

1、實現(xiàn)2個UIAbility,分別為EntryUIAbility和FuncUIAbility,對應(yīng)有兩個Page,分別為Index和Func。

2、Index頁面里面有一個Hello Harmony的Text控件,為其增加點擊事件,點擊后傳遞一個內(nèi)容為"Welcome to Harmony"的msg給與其綁定的EntryUIAbility。

3、EntryUIAbility收到點擊事件后,調(diào)起FuncUIAbility。

4、FuncUIAbility將msg傳遞給與其綁定的Func頁面。

5、Func頁面接受到msg后,將其展現(xiàn)在該頁面的一個Text控件中。

? ? 接下來,我們一起run一下我們的項目,看下效果是否符合預(yù)期:

???????鴻蒙開發(fā)(四)UIAbility和Page交互,鴻蒙,harmonyos,交互,華為

? ? 最后,簡單總結(jié)一下。本篇我們一起回顧了之前學(xué)習(xí)的關(guān)于UIAbility的相關(guān)知識,并在開篇拋出了一個UIAbility和Page相互交互的需求。然后我們拆分需求,循序漸進(jìn)地實現(xiàn)了我們的需求。并在最后,向大家展示了一下demo的效果。在文章中,有幾處加了背景顏色的需要特別注意的信息,大家需要格外的留意,以防止掉進(jìn)坑里。下一篇,跟大家一起學(xué)習(xí)下UI開發(fā)的基礎(chǔ)知識。文章來源地址http://www.zghlxwxcb.cn/news/detail-801248.html

到了這里,關(guān)于鴻蒙開發(fā)(四)UIAbility和Page交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS鴻蒙基于Java開發(fā):旋轉(zhuǎn)表冠交互

    目錄 UI組件支持旋轉(zhuǎn)表冠 接口說明 UI組件自動支持旋轉(zhuǎn)表冠操作 自定義UI組件對旋轉(zhuǎn)表冠的響應(yīng) 靈敏度設(shè)置 振動效果設(shè)置

    2024年01月23日
    瀏覽(19)
  • HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計- 華為分享圖標(biāo)

    HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計- 華為分享圖標(biāo)

    HarmonyOS設(shè)計文檔中,為大家提供了獨特的華為分享圖標(biāo),開發(fā)者可以根據(jù)需要直接引用。 開發(fā)者直接使用官方提供的華為分享圖標(biāo)內(nèi)容,既可以符合HarmonyOS原生應(yīng)用的開發(fā)上架運(yùn)營規(guī)范,又可以防止使用別人的內(nèi)容產(chǎn)生的侵權(quán)意外情況等,減少自主創(chuàng)作華為分享圖標(biāo)的工作量

    2024年02月08日
    瀏覽(110)
  • 【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開發(fā)|自學(xué)篇

    【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開發(fā)|自學(xué)篇

    ? ??個人主頁:?Aileen_0v0 ??熱門專欄:?華為鴻蒙系統(tǒng)學(xué)習(xí)|計算機(jī)網(wǎng)絡(luò)|數(shù)據(jù)結(jié)構(gòu)與算法 ??個人格言: \\\"沒有羅馬,那就自己創(chuàng)造羅馬~\\\" 目錄 HarmonyOS 4.0 技術(shù)介紹: HarmonyOS三大特征: ? ? 1.實現(xiàn)硬件互助,資源共享。 ?????2.?面向開發(fā)者,實現(xiàn)一次開發(fā),多端部署。 ?3.一套操

    2024年02月05日
    瀏覽(29)
  • 鴻蒙HarmonyOS應(yīng)用開發(fā)之使用Node-API實現(xiàn)跨語言交互開發(fā)流程

    鴻蒙HarmonyOS應(yīng)用開發(fā)之使用Node-API實現(xiàn)跨語言交互開發(fā)流程

    使用Node-API實現(xiàn)跨語言交互,首先需要按照Node-API的機(jī)制實現(xiàn)模塊的注冊和加載等相關(guān)動作。 ArkTS/JS側(cè) :實現(xiàn)C++方法的調(diào)用。代碼比較簡單,import一個對應(yīng)的so庫后,即可調(diào)用C++方法。 Native側(cè) :.cpp文件,實現(xiàn)模塊的注冊。需要提供注冊lib庫的名稱,并在注冊回調(diào)方法中定義接

    2024年04月26日
    瀏覽(28)
  • 華為鴻蒙HarmonyOS應(yīng)用開發(fā)者高級認(rèn)證試題及答案

    判斷 1只要使用端云一體化的云端資源就需要支付費(fèi)用(錯) 2所有使用@Component修飾的自定義組件都支持onPageShow,onBackPress和onPageHide生命周期函數(shù)。(錯) 3 HarmonyOS應(yīng)用可以兼容OpenHarmony生態(tài)(對) 4 使用端云一體化開發(fā),無需自己搭建服務(wù)器,并進(jìn)行運(yùn)維了。(對) 5基于端

    2024年02月04日
    瀏覽(25)
  • HarmonyOS鴻蒙開發(fā)指南:基于ArkTS開發(fā) 輕量級智能穿戴 體驗應(yīng)用、構(gòu)建布局、繪制樣式???????和交互事件

    HarmonyOS鴻蒙開發(fā)指南:基于ArkTS開發(fā) 輕量級智能穿戴 體驗應(yīng)用、構(gòu)建布局、繪制樣式???????和交互事件

    目錄 體驗應(yīng)用 構(gòu)建布局 繪制樣式??????? 交互事件 HelloWorld工程目錄如下圖所示: 圖1? 目錄結(jié)構(gòu) pages/index/index.hml

    2024年02月01日
    瀏覽(27)
  • 華為鴻蒙開發(fā)(HarmonyOs開發(fā)):超詳細(xì)的:DevEco Studio 的安裝和配置 、華為第三方包依賴:SDK軟件包的安裝、Nodejs的導(dǎo)入配置

    華為鴻蒙開發(fā)(HarmonyOs開發(fā)):超詳細(xì)的:DevEco Studio 的安裝和配置 、華為第三方包依賴:SDK軟件包的安裝、Nodejs的導(dǎo)入配置

    2023年11月28日20:00:00 ????HarmonyOs 開發(fā)工具 ???? ????DevEco Studio 的安裝和配置???? ?????????? 關(guān)注了解更多 一、打開鴻蒙開發(fā)工具官網(wǎng) 下面是安裝DevEco Studio 的詳細(xì)步驟:希望大家給個關(guān)注,祝大家:踏上HarmonyOs 之旅,步步高升! 下載地址:官

    2024年02月03日
    瀏覽(105)
  • 【鴻蒙軟件開發(fā)】UIAbility組件概況、生命周期與啟動模式

    【鴻蒙軟件開發(fā)】UIAbility組件概況、生命周期與啟動模式

    UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶交互。 UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口;一個UIAbility組件中可以通過多個頁面來實現(xiàn)一個功能模塊。每一個UIAbility組件實例,都對應(yīng)于一個最近任務(wù)列表中的任務(wù)。 UIAbility組件是一種包

    2024年02月05日
    瀏覽(30)
  • 鴻蒙開發(fā)筆記(十):Stage模型開發(fā)中的UIAbility使用(類Activity)

    鴻蒙開發(fā)筆記(十):Stage模型開發(fā)中的UIAbility使用(類Activity)

    應(yīng)用模型是HarmonyOS為開發(fā)者提供的應(yīng)用程序所需能力的抽象提煉,它提供了應(yīng)用程序必備的組件和運(yùn)行機(jī)制。有了應(yīng)用模型,開發(fā)者可以基于一套統(tǒng)一的模型進(jìn)行應(yīng)用開發(fā),使應(yīng)用開發(fā)更簡單、高效。 HarmonyOS應(yīng)用模型的構(gòu)成要素包括: 應(yīng)用組件 應(yīng)用組件是應(yīng)用的基本組成單

    2024年01月18日
    瀏覽(26)
  • HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Stage模型UIAbility組件使用(一)

    HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Stage模型UIAbility組件使用(一)

    一、UIAbility組件概述 1.概述 UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶交互。 UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口;一個UIAbility組件中可以通過多個頁面來實現(xiàn)一個功能模塊。每一個UIAbility組件實例,都對應(yīng)于一個最近任務(wù)列表中的

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包