<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          HarmonyOS入門教程之頁面跳轉(zhuǎn)(Java版)

          共 5418字,需瀏覽 11分鐘

           ·

          2021-06-27 16:51

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

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

           

          正文

           

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

           

          1.1. 基本實(shí)驗(yàn)步驟

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

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

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

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

          1.2. 核心代碼部分


          1.2.1. 無參跳轉(zhuǎn)


          MainAbilitySlice.java


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


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

           

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


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


          MainAbilitySlice.java


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


          secondAbilitySlice.java


          @Overridepublic void onStart(Intent intent) {    super.onStart(intent);    super.setUIContent(ResourceTable.Layout_ability_2);
          Text text = (Text) findComponentById(ResourceTable.Id_ability_text_2); // 獲得text組件 // getStringParam(),從inent中通過鍵獲取值,因?yàn)槭擎I值對形式;返回的結(jié)果為"鴻蒙,你好" text.setText(intent.getStringParam("data")); // 修改text組件的內(nèi)容,會覆蓋原來的內(nèi)容
          }


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

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

           

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

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

          MainAbilitySlice.java


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


          ThridAbilitySlice.java


          @Overridepublic void onStart(Intent intent) {   super.onStart(intent);   super.setUIContent(ResourceTable.Layout_ability_3);
          // 通過組件id獲取組件 Text text = (Text) findComponentById(ResourceTable.Id_ability_text_3); text.setClickedListener(component -> { Intent intent1 = new Intent(); intent1.setParam("pwd", "51cto"); // 設(shè)置參數(shù) setResult(intent1); // 設(shè)置返回的結(jié)果 terminate(); // 點(diǎn)擊事件結(jié)束后銷毀該slice });
          }

          MainAbilitySlice.java


          @Overrideprotected void onResult(int requestCode, Intent resultIntent) {    super.onResult(requestCode, resultIntent);    // 如果請求代碼校驗(yàn)通過,則執(zhí)行一下的操作    if (requestCode == 666) {        // 獲取pwd的值        String pwd = resultIntent.getStringParam("pwd");        // 在pwd的值,添加到原文本的后面        text_main.append(" 密碼:" + pwd);    }}


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

          結(jié)果

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

           

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

           

          2.1 基本實(shí)驗(yàn)步驟


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

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

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

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

           

          2.2. 核心代碼部分

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


          MainAbilitySlice.java


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

          結(jié)果

          2.2.2. 通過 setAction() 方式


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

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


          public class SecondAbility extends Ability {   @Override   public void onStart(Intent intent) {      super.onStart(intent);      super.setMainRoute(SecondPageSlice.class.getName());
          // 第一個參數(shù)為:config.json中聲明的actions;第二個參數(shù)為:要跳轉(zhuǎn)目標(biāo)Slice的路徑名 super.addActionRoute("abilityslice2", SecondPageSlice.class.getName()); }}


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


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


          結(jié)果

           3. 總結(jié)

           

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


          默認(rèn):

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

          帶參數(shù):


          // 主頁面intent.setParam()present()// 目標(biāo)頁面intent.getXXXParam()


          等待返回值:


          // 主頁面presentForResult()// 目標(biāo)頁面setResult()// 主頁面實(shí)現(xiàn)onResult()方法


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


          OperationBuilder()方式


          // 主頁面Operation operation = new Intent.opationBuilder()    .withDeviceId(設(shè)備id)    .withBundleName(包名)    .withAbilityName(FA名)    .build();intent.setOparation(operation);startAbility(intent);


          setAction()方式

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


          3.3. 差別


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

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

           

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

           

          【abilityslice頁面跳轉(zhuǎn).rar】是源碼

          https://harmonyos.51cto.com/resource/643
          --完--

          關(guān)注「HarmonyOS應(yīng)用開發(fā)者」,一起學(xué)習(xí)成長

          后臺回復(fù)"教程" 獲得最新鴻蒙開發(fā)者教程,助你快速上手鴻蒙開發(fā)!


          花了半個月時間整理了522頁的《HarmonyOS從入門到精通》電子書


          瀏覽 153
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人激情直播 | 成人无码网站 | 91美女视频在线观看 | 靠逼网站免费看 | 国产内射一级视频 |