六、华为鸿蒙HarmonyOS应用开发之Java开发模式下的不同Page 间实现页面跳转
不同Page 間導航,實現頁面跳轉
AbilitySlice作為Page的內部單元,以Action的形式對外暴露,因此可以通過配置Intent的Action導航到目標AbilitySlice。Page間的導航可以使用startAbility()或startAbilityForResult()方法,獲得返回結果的回調為onAbilityResult()。在Ability中調用setResult()可以設置返回結果。詳細用法可參考根據Operation的其他屬性啟動應用中的示例。
根據Ability的全稱啟動應用
通過構造包含BundleName與AbilityName的Operation對象,可以啟動一個Ability、并導航到該Ability。示例代碼如下:
作為處理請求的對象,會在相應的回調方法中接收請求方傳遞的Intent對象。以導航到另一個Ability為例,導航的目標Ability可以在其onStart()回調的參數中獲得Intent對象。
根據Operation的其他屬性啟動應用
有些場景下,開發者需要在應用中使用其他應用提供的某種能力,而不感知提供該能力的具體是哪一個應用。例如開發者需要通過瀏覽器打開一個鏈接,而不關心用戶最終選擇哪一個瀏覽器應用,則可以通過Operation的其他屬性(除BundleName與AbilityName之外的屬性)描述需要的能力。如果設備上存在多個應用提供同種能力,系統則彈出候選列表,由用戶選擇由哪個應用處理請求。以下示例展示使用Intent跨Ability查詢天氣信息。
請求方
在Ability中構造Intent以及包含Action的Operation對象,并調用startAbilityForResult()方法發起請求。然后重寫onAbilityResult()回調方法,對請求結果進行處理。
private void queryWeather() {Intent intent = new Intent();Operation operation = new Intent.OperationBuilder().withAction(Intent.ACTION_QUERY_WEATHER).build();intent.setOperation(operation);startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER); }@Override protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {switch (requestCode) {case REQ_CODE_QUERY_WEATHER:// Do something with result....return;default:...} }處理方
1.作為處理請求的對象,首先需要在配置文件中聲明對外提供的能力,以便系統據此找到自身并作為候選的請求處理者。
{"module": {..."abilities": [{..."skills":[{"actions":["ability.intent.QUERY_WEATHER"]}]...}]...}... }2.在Ability中配置路由以便支持以此action導航到對應的AbilitySlice。
@Override protected void onStart(Intent intent) {...addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName());... }3.在Ability中處理請求,并調用setResult()方法暫存返回結果。
@Override protected void onActive() {...Intent resultIntent = new Intent();setResult(0, resultIntent); //0為當前Ability銷毀后返回的resultCode。... }//==========================================
實例測試:
1.首先創建Empty Ability(Java)的AbilityJump工程,運行出現如下界面:
2.在MainAbility.java同級別添加NewAbility.java文件,在slice文件夾下添加NewAbilitySlice.java文件,在layout文件夾下添加ability_new.xml文件。
NewAbility.java
NewAbilitySlice.java
package com.example.abilityjump.slice;import com.example.abilityjump.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent;public class NewAbilitySlice extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_new);}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);} }ability_new.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:alignment="center"ohos:orientation="vertical"><Textohos:id="$+id:text_new"ohos:height="match_content"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizontal_center"ohos:text="$string:mainability_new"ohos:text_size="40vp"/></DirectionalLayout>3.在中文string.json添加
{
“name”: “mainability_new”,
“value”: “目標測試”
}
string.json
4.在config.json中"abilities"注冊NewAbility
config.json
5.此時編譯運行,應該沒有錯誤,還是出現下面效果:
6.設置文本點擊事件導航到另外一個Ability頁面
參數發送端
MainAbilitySlice.java
參數接收端
NewAbilitySlice.java
7.運行程序,效果如下:
歡迎關注公眾號,方便技術交流
總結
以上是生活随笔為你收集整理的六、华为鸿蒙HarmonyOS应用开发之Java开发模式下的不同Page 间实现页面跳转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Typora颠覆写作体验的极简好用 Ma
- 下一篇: 四、华为鸿蒙HarmonyOS应用开发之