自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS編程頁面跳轉(zhuǎn) | Java注釋版

開發(fā) 前端 OpenHarmony
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[406839]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

這里有HarmonyOS文檔學習 | Page Ability | 思維導圖,是關于文檔部分的思維導圖,頁面跳轉(zhuǎn)也是要到里面的知識

本文章只是說明書,是代碼的補充部分。不建議僅根據(jù)該文進行實踐

正確的做法是下載附件中的源碼,對照源碼和文章的步驟,進行實踐復現(xiàn)

頁面跳轉(zhuǎn)即AbilitySlice間導航。這部分有兩種,一種是同Page里跳轉(zhuǎn),另一種是不同Page里跳轉(zhuǎn)

下面將介紹這兩種的實現(xiàn)方式

正文

1. 同Page跳轉(zhuǎn)的三種實現(xiàn)方式

1.1. 基本實驗步驟

1. 在layout文件夾中寫xml布局文件

ability_main.xml是主頁面,其他三個是要跳轉(zhuǎn)到的頁面,可以隨便定義內(nèi)容

2. 在slice中聲明創(chuàng)建Slice文件聲明調(diào)用layout布局文件

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

3. 在主Slice中,編寫業(yè)務代碼實現(xiàn)跳轉(zhuǎn)(不同的方式實現(xiàn)區(qū)別主要在第3個步驟)

1.2. 核心代碼部分

1.2.1. 無參跳轉(zhuǎn)

MainAbilitySlice.java

  1. // 第一個按鈕:實現(xiàn)基本的跳轉(zhuǎn) 
  2. // 通過xml布局文件中的組件ID獲取組件 
  3. Button btn_1 = (Button) findComponentById(ResourceTable.Id_btn_1); 
  4. // 設置按鈕點擊監(jiān)聽事件,在點擊時進行如下操作 
  5. btn_1.setClickedListener(component -> { // lambda表達式 
  6.     Intent btn_1_intent = new Intent(); // Intent:意圖,是對象之間傳遞信息的載體 
  7.     // 通過present進行跳轉(zhuǎn)操作 
  8.     /** 
  9.      * 參數(shù)說明 
  10.      * new FirstAbilitySlice():表示要跳轉(zhuǎn)到的slice 
  11.      * btn_1_intent:把信息載體作為參數(shù)傳到對應slice中 
  12.      */ 
  13.     present(new FirstAbilitySlice(), btn_1_intent); 
  14. }); 

 調(diào)用present()之后會直接跳轉(zhuǎn)

1.2.2. 帶參數(shù)跳轉(zhuǎn)

大部分內(nèi)容和第一個實現(xiàn)差不多,所以就不寫注釋了

MainAbilitySlice.java

  1. // 第二個按鈕:實現(xiàn)帶參數(shù)跳轉(zhuǎn);可以邊跳轉(zhuǎn)邊傳值改變內(nèi)容 
  2. Button btn_2 = (Button) findComponentById(ResourceTable.Id_btn_2); 
  3. btn_2.setClickedListener(component -> { 
  4.    Intent btn_2_intent = new Intent(); 
  5.    btn_2_intent.setParam("data""鴻蒙,你好");    // 設置參數(shù),形式是K:V結(jié)構(gòu),存在intent中 
  6.    present(new SecondAbilitySlice(), btn_2_intent); 
  7. }); 

 secondAbilitySlice.java

  1. @Override 
  2. public void onStart(Intent intent) { 
  3.     super.onStart(intent); 
  4.     super.setUIContent(ResourceTable.Layout_ability_2); 
  5.  
  6.     Text text = (Text) findComponentById(ResourceTable.Id_ability_text_2);  // 獲得text組件 
  7.     // getStringParam(),從inent中通過鍵獲取值,因為是鍵值對形式;返回的結(jié)果為"鴻蒙,你好" 
  8.     text.setText(intent.getStringParam("data"));    // 修改text組件的內(nèi)容,會覆蓋原來的內(nèi)容 
  9.  

 在主頁面設置參數(shù)存入intent中之后跳轉(zhuǎn),跳轉(zhuǎn)到目標頁面Slice后,讀取inent中的參數(shù),從而修改本來的內(nèi)容

內(nèi)容由 “第二個頁面跳轉(zhuǎn)實現(xiàn)” 變?yōu)?“鴻蒙,你好”

1.2.3. 帶返回值跳轉(zhuǎn)

(以下代碼按步驟實現(xiàn))

MainAbilitySlice.java

  1. // 第三個按鈕:實現(xiàn)帶返回值跳轉(zhuǎn);可以通過校驗返回值,在onResult中實現(xiàn)校驗通過后的其他行為 
  2. text_main = (Text) findComponentById(ResourceTable.Id_text_main); 
  3. Button btn_3 = (Button) findComponentById(ResourceTable.Id_btn_3); 
  4. btn_3.setClickedListener(component -> { 
  5.     Intent btn_3_intent = new Intent(); 
  6.     // 這是使用的是presentForResult()進行跳轉(zhuǎn),最后一個參數(shù)是請求代碼,用于返回時校驗 
  7.     presentForResult(new ThirdAbilitySlice(), btn_3_intent, 666); 
  8. }); 

 ThridAbilitySlice.java

  1. @Override 
  2. public void onStart(Intent intent) { 
  3.    super.onStart(intent); 
  4.    super.setUIContent(ResourceTable.Layout_ability_3); 
  5.  
  6.    // 通過組件id獲取組件 
  7.    Text text = (Text) findComponentById(ResourceTable.Id_ability_text_3); 
  8.    text.setClickedListener(component -> { 
  9.       Intent intent1 = new Intent(); 
  10.       intent1.setParam("pwd""51cto");  // 設置參數(shù) 
  11.       setResult(intent1);    // 設置返回的結(jié)果 
  12.       terminate();   // 點擊事件結(jié)束后銷毀該slice 
  13.    }); 
  14.  

 MainAbilitySlice.java

  1. @Override 
  2. protected void onResult(int requestCode, Intent resultIntent) { 
  3.     super.onResult(requestCode, resultIntent); 
  4.     // 如果請求代碼校驗通過,則執(zhí)行一下的操作 
  5.     if (requestCode == 666) { 
  6.         // 獲取pwd的值 
  7.         String pwd = resultIntent.getStringParam("pwd"); 
  8.         // 在pwd的值,添加到原文本的后面 
  9.         text_main.append(" 密碼:" + pwd); 
  10.     } 

 調(diào)用流程如下所示

 

結(jié)果

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)
HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

點擊獲取密碼后,會調(diào)用terminate()方法銷毀頁面?;氐街黜撁嫱瑫r調(diào)用onResult()方法,執(zhí)行文字拼接

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

2. 不同Page跳轉(zhuǎn)的兩種實現(xiàn)方式

2.1 基本實驗步驟

1. 新建Ability,同時DES會自動在layout和slice中創(chuàng)建新的文件

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

2. 在layout文件夾中寫xml布局文件

3. 在slice中聲明創(chuàng)建Slice文件聲明調(diào)用layout布局文件

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

4. 在主Slice中,編寫業(yè)務代碼實現(xiàn)跳轉(zhuǎn)

2.2. 核心代碼部分

2.2.1. 通過 new Intent.OperationBuilder() 方式

MainAbilitySlice.java

  1. // 推薦使用這種方法實現(xiàn)!使用OperationBuilder()方法實現(xiàn) 
  2. Button btn_4 = (Button) findComponentById(ResourceTable.Id_btn_4); 
  3. btn_4.setClickedListener(component -> { 
  4.    Intent btn_4_intent = new Intent(); 
  5.    Operation operation = new Intent.OperationBuilder() 
  6.          .withDeviceId("")    // 設備Id,在本地上進行跳轉(zhuǎn)可以為空,跨設備進行跳轉(zhuǎn)則需要傳入值 
  7.          .withBundleName("com.anzia.pagejump")    // 包名 
  8.          .withAbilityName(".SecondAbility")    // Ability頁面的名稱,在本地可以缺省前面的路徑 
  9.          .build();    // 構(gòu)建代碼 
  10.    btn_4_intent.setOperation(operation);    // 將operation存入到intent中 
  11.    startAbility(btn_4_intent);    // 實現(xiàn)Ability跳轉(zhuǎn) 
  12. }); 

結(jié)果

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

2.2.2. 通過 setAction() 方式

第一步:在config中聲明SecondAbility的actions

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

第二步:在SecondAbility中添加Action路由

  1. public class SecondAbility extends Ability { 
  2.    @Override 
  3.    public void onStart(Intent intent) { 
  4.       super.onStart(intent); 
  5.       super.setMainRoute(SecondPageSlice.class.getName()); 
  6.  
  7.        // 第一個參數(shù)為:config.json中聲明的actions;第二個參數(shù)為:要跳轉(zhuǎn)目標Slice的路徑名 
  8.       super.addActionRoute("abilityslice2", SecondPageSlice.class.getName()); 
  9.    } 
HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

第三步:在MainAbilitySlice.java中實現(xiàn)不同頁面跳轉(zhuǎn)

  1. // 不推薦這個,挺麻煩的 
  2. // 先去config.json中添加對應的action 
  3. // 在Ability文件添加addActionRoute()路由 
  4. // 在Slice文件中組件的監(jiān)聽事件設置跳轉(zhuǎn)方法 
  5. Button btn_5 = (Button) findComponentById(ResourceTable.Id_btn_5); 
  6. btn_5.setClickedListener(component -> { 
  7.    Intent btn_5_intent = new Intent(); 
  8.    btn_5_intent.setAction("abilityslice2"); 
  9.    startAbility(btn_5_intent); 
  10. }); 

結(jié)果

HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)
HarmonyOS編程 | 頁面跳轉(zhuǎn) | Java注釋版-鴻蒙HarmonyOS技術(shù)社區(qū)

3. 總結(jié)

3.1. 同頁面跳轉(zhuǎn)

默認:

  1. // 直接調(diào)用present()方法 

帶參數(shù):

  1. // 主頁面 
  2. intent.setParam() 
  3. present() 
  4. // 目標頁面 
  5. intent.getXXXParam() 

等待返回值:

  1. // 主頁面 
  2. presentForResult() 
  3. // 目標頁面 
  4. setResult() 
  5. // 主頁面 
  6. 實現(xiàn)onResult()方法 

3.2. 不同頁面跳轉(zhuǎn)

OperationBuilder()方式

  1. // 主頁面 
  2. Operation operation = new Intent.opationBuilder() 
  3.     .withDeviceId(設備id) 
  4.     .withBundleName(包名) 
  5.     .withAbilityName(FA名) 
  6.     .build(); 
  7. intent.setOparation(operation); 
  8. startAbility(intent); 

setAction()方式

  1. // 在config.json中聲明actions 
  2. // 在目標Ability中調(diào)用addActionRoute()方法添加路由 
  3. super.addActionRoute(); 
  4. // 主頁面 
  5. intent.setAction(action名); 
  6. startAbility(intent); 

3.3. 差別

有present()、presentForResult()的是同頁面跳轉(zhuǎn)

有startAbility()的是不同頁面跳轉(zhuǎn)

不同頁面跳轉(zhuǎn)推薦使用OperationBuilder()方式,因為這種方式在跨設備調(diào)用還需要用。習慣這一種就好了

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關推薦

2021-06-23 15:48:08

鴻蒙HarmonyOS應用

2021-01-05 10:35:04

鴻蒙HarmonyOS應用開發(fā)

2021-05-18 09:49:08

鴻蒙HarmonyOS應用

2009-12-24 17:57:53

WPF頁面跳轉(zhuǎn)

2021-09-18 14:45:26

鴻蒙HarmonyOS應用

2009-12-16 17:24:26

Ruby on Rai

2012-04-19 16:41:24

Titanium視頻實現(xiàn)頁面跳轉(zhuǎn)

2011-05-11 16:54:49

JSP

2009-07-01 18:08:18

JSP頁面跳轉(zhuǎn)

2010-08-05 09:39:17

Flex頁面跳轉(zhuǎn)

2011-04-07 10:50:47

數(shù)據(jù)庫編程注釋規(guī)范

2009-07-02 09:25:41

JSP實現(xiàn)頁面跳轉(zhuǎn)

2010-08-13 13:25:53

Flex頁面跳轉(zhuǎn)

2009-07-03 18:32:18

JSP頁面跳轉(zhuǎn)

2010-08-05 09:33:08

Flex頁面跳轉(zhuǎn)

2015-05-05 10:51:32

php頁面跳轉(zhuǎn)方法

2009-07-03 17:24:31

Servlet頁面跳轉(zhuǎn)

2009-02-17 10:40:26

頁面跳轉(zhuǎn)JSP教程

2009-12-11 13:25:01

PHP頁面跳轉(zhuǎn)

2024-01-03 08:22:32

移動應用頁面跳轉(zhuǎn)
點贊
收藏

51CTO技術(shù)棧公眾號