日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

六、华为鸿蒙HarmonyOS应用开发之Java开发模式下的不同Page 间实现页面跳转

發布時間:2025/3/11 java 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 六、华为鸿蒙HarmonyOS应用开发之Java开发模式下的不同Page 间实现页面跳转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不同Page 間導航,實現頁面跳轉

AbilitySlice作為Page的內部單元,以Action的形式對外暴露,因此可以通過配置Intent的Action導航到目標AbilitySlice。Page間的導航可以使用startAbility()或startAbilityForResult()方法,獲得返回結果的回調為onAbilityResult()。在Ability中調用setResult()可以設置返回結果。詳細用法可參考根據Operation的其他屬性啟動應用中的示例。

根據Ability的全稱啟動應用
通過構造包含BundleName與AbilityName的Operation對象,可以啟動一個Ability、并導航到該Ability。示例代碼如下:

Intent intent = new Intent();// 通過Intent中的OperationBuilder類構造operation對象,指定設備標識(空串表示當前設備)、應用包名、Ability名稱 Operation operation = new Intent.OperationBuilder().withDeviceId("").withBundleName("com.demoapp").withAbilityName("com.demoapp.FooAbility").build();// 把operation設置到intent中 intent.setOperation(operation); startAbility(intent);

作為處理請求的對象,會在相應的回調方法中接收請求方傳遞的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

package com.example.abilityjump;import com.example.abilityjump.slice.NewAbilitySlice; import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent;public class NewAbility extends Ability {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setMainRoute(NewAbilitySlice.class.getName());} }

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

{"string": [{"name": "entry_MainAbility","value": "entry_MainAbility"},{"name": "mainability_description","value": "Java_Empty Ability"},{"name": "mainability_HelloWorld","value": "你好,世界"},{"name": "mainability_new","value": "目標測試"}] }

4.在config.json中"abilities"注冊NewAbility

config.json

{"app": {"bundleName": "com.example.abilityjump","vendor": "example","version": {"code": 1000000,"name": "1.0.0"}},"deviceConfig": {},"module": {"package": "com.example.abilityjump","name": ".MyApplication","mainAbility": "com.example.abilityjump.MainAbility","deviceType": ["phone"],"distro": {"deliveryWithInstall": true,"moduleName": "entry","moduleType": "entry","installationFree": true},"abilities": [{"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}],"orientation": "unspecified","name": "com.example.abilityjump.MainAbility","icon": "$media:icon","description": "$string:mainability_description","label": "$string:entry_MainAbility","type": "page","launchType": "standard"},{"skills": [{"actions": ["action.new"]}],"orientation": "unspecified","name": "com.example.abilityjump.NewAbility","icon": "$media:icon","description": "$string:mainability_description","label": "$string:entry_MainAbility","type": "page","launchType": "standard"}]} }

5.此時編譯運行,應該沒有錯誤,還是出現下面效果:

6.設置文本點擊事件導航到另外一個Ability頁面

參數發送端
MainAbilitySlice.java

package com.example.abilityjump.slice;import com.example.abilityjump.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.aafwk.content.Operation; import ohos.agp.components.Text;public class MainAbilitySlice extends AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//獲取文本對象Text text = (Text)findComponentById(ResourceTable.Id_text_helloworld);//設置文本的點擊事件text.setClickedListener(component -> {Intent intent1 = new Intent();intent1.setParam("data","新頁面");Operation operation = new Intent.OperationBuilder().withAction("action.new").build();intent1.setOperation(operation);startAbility(intent1);});}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);} }

參數接收端
NewAbilitySlice.java

package com.example.abilityjump.slice;import com.example.abilityjump.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Text;public class NewAbilitySlice extends AbilitySlice {Text text;String oldString;@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_new);//獲取文本對象Text text = (Text)findComponentById(ResourceTable.Id_text_new);oldString = text.getText();//設置新文本text.setText(oldString + "," + intent.getStringParam("data"));}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);} }

7.運行程序,效果如下:

歡迎關注公眾號,方便技術交流

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的六、华为鸿蒙HarmonyOS应用开发之Java开发模式下的不同Page 间实现页面跳转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。