【鸿蒙 HarmonyOS】界面跳转 ( Page Ability 的 action 标识 | Page Ability 之间的界面跳转及传递数据 | 鸿蒙工程下创建 Module | 代码示例 )
文章目錄
- 一、Page Ability 的 action 標識
- 二、Page Ability 之間的界面跳轉及傳遞數據
- 三、鴻蒙工程下創建 Module
- 四、代碼示例
- 五、執行效果
參考文檔 :
- Page Ability 基本概念
- Page Ability 聲明周期
- AbilitySlice 間導航
- 跨設備遷移
一、Page Ability 的 action 標識
Page Ability 標識 : action 字符串 ;
Page Ability 界面跳轉 , 其中 Page Ability 是通過 action 字符串進行標記的 , 每個 Page Ability 對應的 action 字符串在 src/main/ 下的 config.json 中配置 ,
其中 “abilities” 是配置所有的 Ability , 前者是主界面的 Ability , 后者是要跳轉的 Ability , 兩個都配置在 “abilities”: [] 中 , 中間使用逗號隔開 ;
"abilities": [{"orientation": "unspecified","visible": true,"name": "com.example.ability.MainAbility","icon": "$media:icon","description": "$string:mainability_description","label": "ability","type": "page","launchType": "standard"},{"skills":[{"actions":["ability.intent.MainAbility2"]}],"orientation": "unspecified","visible": true,"name": "com.example.ability.MainAbility2","icon": "$media:icon","description": "$string:mainability_description","label": "ability","type": "page","launchType": "standard"}]配置 Ability 的 action 字符串 , 在 Ability 中添加如下配置 , 即可配置該 Page Ability 的 action 字符串 ;
下面配置的 com.example.ability.MainAbility2 的界面標識是 “ability.intent.MainAbility2” 字符串 ;
"skills":[{"actions":["ability.intent.MainAbility2"]}]二、Page Ability 之間的界面跳轉及傳遞數據
兩個 Page Ability , 對應的兩個 AbilitySlice , 以及兩個 布局文件 ;
核心邏輯都在兩個 AbilitySlice 中 ;
1. Page Ability 設置 AbilitySlice :
創建兩個 MainAbility , 初始狀態下進入的是 MainAbility , 然后跳轉到 MainAbility2 ;
初始 AbilitySlice 如下 , 在 onStart ( ) 方法中 , 調用 super.setUIContent ( ) 方法設置 XML 布局文件 , 相當于 Android 中的 setContentView ( ) 方法 ;
XML 布局文件使用 ResourceTable.Layout_ability_main 方式引用 ;
上述實際的布局文件是在 HarmonyHelloWorld\entry\src\main\resources\base\layout 目錄下的 ability_main.xml 布局文件 ;
引用時在 ability_main 文件名稱前 , 加上了 ResourceTable.Layout_ 前綴 , 相當于 Android 中的 R.layout. 前綴 ;
// 設置布局文件 super.setUIContent(ResourceTable.Layout_ability_main);2. 獲取按鈕組件 , 并設置點擊事件 :
在 AbilitySlice 中 , 調用 findComponentById ( ) 方法 , 可以獲取按鈕組件 ;
獲取的對象類型是 Component , 需要強轉為 Button 對象 ;
// 獲取 XML 布局中的 Button 按鈕 Button button = (Button) findComponentById(ResourceTable.Id_button);設置按鈕點擊事件 : 調用 setClickedListener ( ) 方法 , 設置 Component.ClickedListener 類型的點擊監聽器 , 按鈕被點擊后 , 會自動回調 onClick ( ) 方法 ;
// 設置 Button 按鈕點擊事件button.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {}});3. Page Ability 界面跳轉 :
首先要初始化 Intent 意圖對象 , 然后調用 Intent 對象的 setAction ( ) 方法設置 action 字符串 , 和 setParam ( ) 方法傳遞的數據 , 最后調用 startAbility ( ) 啟動另外一個 action 字符串對應的 Page Ability 界面 ;
// 初始化傳遞的 Intent 意圖對象Intent intent = new Intent();// 設置跳轉的目標 Page Ability 的 action 標識intent.setAction("ability.intent.MainAbility2");// 設置傳遞的數據intent.setParam("DATA", 888);// 跳轉到目標 Page AbilitystartAbility(intent);4. 獲取 Text 組件 , 并設置顯示內容 : 在跳轉后的 Page Ability 中的 AbilitySlice 的 onStart ( ) 方法中 , 調用 findComponentById ( ) 方法獲取 Text 組件 , 需要強制轉換 ;
調用 Text 組件的 setText ( ) 方法 , 設置組件顯示的文字內容 ;
// 獲取 Text 文字顯示組件Text text = (Text) findComponentById(ResourceTable.Id_text);// 獲取 Intent 中的數據 , 并顯示到界面中text.setText("頁面 2 數據 : " + intent.getIntParam("DATA", 0));三、鴻蒙工程下創建 Module
創建新的 Module , 演示 Page Ability 之間的界面跳轉 ;
右鍵點擊項目跟目錄 , 選擇 New / Module … 選項 ;
選擇 " Phone " 手機應用 , " Empty Feature Ability ( Java ) " 類型的 Java 語言應用 ;
配置 Module ;
配置 Ability 界面 ;
四、代碼示例
代碼展示順序 :
① Ability 配置文件 ;
② 主界面 Page Ability 代碼 ;
③ 主界面 Page Ability 對應的 AbilitySlice 代碼 ;
④ 主界面 Page Ability 對應的 AbilitySlice 對應的布局文件代碼 ;
⑤ 跳轉目標界面 Page Ability 代碼 ;
⑥ 跳轉目標界面 Page Ability 對應的 AbilitySlice 代碼 ;
⑦ 跳轉目標界面 Page Ability 對應的 AbilitySlice 對應的布局文件代碼 ;
config.json 完整配置文件 : 主要是查看 Page Ability 的 action 是如何配置的 ;
{"app": {"bundleName": "com.example.harmony","vendor": "example","version": {"code": 1,"name": "1.0"},"apiVersion": {"compatible": 3,"target": 4,"releaseType": "Beta1"}},"deviceConfig": {},"module": {"package": "com.example.ability","name": ".MyApplication","deviceType": ["phone"],"distro": {"deliveryWithInstall": true,"moduleName": "ability","moduleType": "feature"},"abilities": [{"orientation": "unspecified","visible": true,"name": "com.example.ability.MainAbility","icon": "$media:icon","description": "$string:mainability_description","label": "ability","type": "page","launchType": "standard"},{"skills":[{"actions":["ability.intent.MainAbility2"]}],"orientation": "unspecified","visible": true,"name": "com.example.ability.MainAbility2","icon": "$media:icon","description": "$string:mainability_description","label": "ability","type": "page","launchType": "standard"}]} }MainAbility 主界面 Page Ability :
package com.example.ability;import com.example.ability.slice.MainAbilitySlice; import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent;public class MainAbility extends Ability {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setMainRoute(MainAbilitySlice.class.getName());} }MainAbilitySlice 顯示內容 :
package com.example.ability.slice;import com.example.ability.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Button; import ohos.agp.components.Component;public class MainAbilitySlice extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);// 獲取 XML 布局中的 Button 按鈕Button button = (Button) findComponentById(ResourceTable.Id_button);// 設置 Button 按鈕點擊事件button.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {// 初始化傳遞的 Intent 意圖對象Intent intent = new Intent();// 設置跳轉的目標 Page Ability 的 action 標識intent.setAction("ability.intent.MainAbility2");// 設置傳遞的數據intent.setParam("DATA", 888);// 跳轉到目標 Page AbilitystartAbility(intent);}});}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);} }MainAbilitySlice 布局文件 ability_main.xml 內容 :
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:orientation="vertical"><Textohos:id="$+id:text"ohos:height="match_content"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizontal_center"ohos:text="頁面 1"ohos:text_size="50"/><Buttonohos:id="$+id:button"ohos:height="match_parent"ohos:width="match_content"ohos:layout_alignment="bottom|horizontal_center"ohos:text="跳轉到 2 頁面"ohos:text_size="50"/></DirectionalLayout>MainAbility2 跳轉目標界面 Page Ability :
package com.example.ability;import com.example.ability.slice.MainAbilitySlice2; import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent;public class MainAbility2 extends Ability {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setMainRoute(MainAbilitySlice2.class.getName());} }MainAbilitySlice2 顯示內容 :
package com.example.ability.slice;import com.example.ability.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Text;public class MainAbilitySlice2 extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main2);// 獲取 Text 文字顯示組件Text text = (Text) findComponentById(ResourceTable.Id_text);// 獲取 Intent 中的數據 , 并顯示到界面中text.setText("頁面 2 數據 : " + intent.getIntParam("DATA", 0));}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);} }MainAbilitySlice2 布局文件 ability_main2.xml 內容 :
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:orientation="vertical"><Textohos:id="$+id:text"ohos:height="match_content"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizontal_center"ohos:text="頁面 2"ohos:text_size="50"/></DirectionalLayout>五、執行效果
運行后初始主界面 :
點擊 " 跳轉到 2 頁面 " 按鈕 ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【鸿蒙 HarmonyOS】界面跳转 ( Page Ability 的 action 标识 | Page Ability 之间的界面跳转及传递数据 | 鸿蒙工程下创建 Module | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【鸿蒙 HarmonyOS】界面跳转 (
- 下一篇: 【计算理论】计算理论总结 ( 下推自动机