成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS編程頁面跳轉 | Java注釋版

開發 前端 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[406839]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

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

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

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

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

下面將介紹這兩種的實現方式

正文

1. 同Page跳轉的三種實現方式

1.1. 基本實驗步驟

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

ability_main.xml是主頁面,其他三個是要跳轉到的頁面,可以隨便定義內容

2. 在slice中聲明創建Slice文件聲明調用layout布局文件

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

3. 在主Slice中,編寫業務代碼實現跳轉(不同的方式實現區別主要在第3個步驟)

1.2. 核心代碼部分

1.2.1. 無參跳轉

MainAbilitySlice.java

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

 調用present()之后會直接跳轉

1.2.2. 帶參數跳轉

大部分內容和第一個實現差不多,所以就不寫注釋了

MainAbilitySlice.java

  1. // 第二個按鈕:實現帶參數跳轉;可以邊跳轉邊傳值改變內容 
  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""鴻蒙,你好");    // 設置參數,形式是K:V結構,存在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中通過鍵獲取值,因為是鍵值對形式;返回的結果為"鴻蒙,你好" 
  8.     text.setText(intent.getStringParam("data"));    // 修改text組件的內容,會覆蓋原來的內容 
  9.  

 在主頁面設置參數存入intent中之后跳轉,跳轉到目標頁面Slice后,讀取inent中的參數,從而修改本來的內容

內容由 “第二個頁面跳轉實現” 變為 “鴻蒙,你好”

1.2.3. 帶返回值跳轉

(以下代碼按步驟實現)

MainAbilitySlice.java

  1. // 第三個按鈕:實現帶返回值跳轉;可以通過校驗返回值,在onResult中實現校驗通過后的其他行為 
  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()進行跳轉,最后一個參數是請求代碼,用于返回時校驗 
  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");  // 設置參數 
  11.       setResult(intent1);    // 設置返回的結果 
  12.       terminate();   // 點擊事件結束后銷毀該slice 
  13.    }); 
  14.  

 MainAbilitySlice.java

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

 調用流程如下所示

 

結果

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區
HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

點擊獲取密碼后,會調用terminate()方法銷毀頁面。回到主頁面同時調用onResult()方法,執行文字拼接

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

2. 不同Page跳轉的兩種實現方式

2.1 基本實驗步驟

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

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

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

3. 在slice中聲明創建Slice文件聲明調用layout布局文件

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

4. 在主Slice中,編寫業務代碼實現跳轉

2.2. 核心代碼部分

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

MainAbilitySlice.java

  1. // 推薦使用這種方法實現!使用OperationBuilder()方法實現 
  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,在本地上進行跳轉可以為空,跨設備進行跳轉則需要傳入值 
  7.          .withBundleName("com.anzia.pagejump")    // 包名 
  8.          .withAbilityName(".SecondAbility")    // Ability頁面的名稱,在本地可以缺省前面的路徑 
  9.          .build();    // 構建代碼 
  10.    btn_4_intent.setOperation(operation);    // 將operation存入到intent中 
  11.    startAbility(btn_4_intent);    // 實現Ability跳轉 
  12. }); 

結果

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

2.2.2. 通過 setAction() 方式

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

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

第二步:在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.        // 第一個參數為:config.json中聲明的actions;第二個參數為:要跳轉目標Slice的路徑名 
  8.       super.addActionRoute("abilityslice2", SecondPageSlice.class.getName()); 
  9.    } 
HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

第三步:在MainAbilitySlice.java中實現不同頁面跳轉

  1. // 不推薦這個,挺麻煩的 
  2. // 先去config.json中添加對應的action 
  3. // 在Ability文件添加addActionRoute()路由 
  4. // 在Slice文件中組件的監聽事件設置跳轉方法 
  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. }); 

結果

HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區
HarmonyOS編程 | 頁面跳轉 | Java注釋版-鴻蒙HarmonyOS技術社區

3. 總結

3.1. 同頁面跳轉

默認:

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

帶參數:

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

等待返回值:

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

3.2. 不同頁面跳轉

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中調用addActionRoute()方法添加路由 
  3. super.addActionRoute(); 
  4. // 主頁面 
  5. intent.setAction(action名); 
  6. startAbility(intent); 

3.3. 差別

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

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

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

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

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

2021-06-23 15:48:08

鴻蒙HarmonyOS應用

2021-09-18 14:45:26

鴻蒙HarmonyOS應用

2021-01-05 10:35:04

鴻蒙HarmonyOS應用開發

2021-05-18 09:49:08

鴻蒙HarmonyOS應用

2009-07-02 09:25:41

JSP實現頁面跳轉

2009-12-24 17:57:53

WPF頁面跳轉

2009-12-11 13:25:01

PHP頁面跳轉

2009-07-03 17:24:31

Servlet頁面跳轉

2009-02-17 10:40:26

頁面跳轉JSP教程

2012-04-19 16:41:24

Titanium視頻實現頁面跳轉

2010-08-05 09:39:17

Flex頁面跳轉

2009-07-01 18:08:18

JSP頁面跳轉

2009-12-16 17:24:26

Ruby on Rai

2011-05-11 16:54:49

JSP

2011-04-07 10:50:47

數據庫編程注釋規范

2009-12-02 19:42:24

PHP頁面自動跳轉

2009-07-03 17:48:24

JSP頁面跳轉

2009-12-02 20:02:18

PHP實現頁面跳轉

2015-05-05 10:51:32

php頁面跳轉方法

2009-07-03 18:32:18

JSP頁面跳轉
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品在线国产 | 午夜精品一区二区三区免费视频 | 日韩av成人在线 | 久久久女女女女999久久 | 一级毛片免费视频 | 午夜精品久久久久久久久久久久久 | 免费的网站www | 午夜爽爽爽男女免费观看影院 | 精品国产鲁一鲁一区二区张丽 | 国产成人综合在线 | 国产精品一区久久久 | 日日夜夜视频 | 水蜜桃久久夜色精品一区 | 狠狠艹 | 国产精品日韩欧美一区二区三区 | 久久久久久久av麻豆果冻 | 免费视频久久 | 久久综合久久久 | 中文欧美日韩 | 国产99久久精品一区二区永久免费 | 国产视频一区在线 | 在线观看亚洲一区二区 | 午夜手机在线视频 | 91久操视频 | 日韩精品一区二区三区中文字幕 | 日本免费一区二区三区视频 | 精品视频一区二区 | 色婷婷综合久久久久中文一区二区 | 久色激情 | 精品一二三区 | 淫片一级国产 | 成人国内精品久久久久一区 | 一级毛片在线播放 | 精精国产xxxx视频在线 | 国产成人在线一区二区 | 亚洲在线一区二区 | 一区二区三区四区在线视频 | 人人射人人草 | 在线播放中文字幕 | 久操av在线 | 麻豆精品国产免费 |