偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

學(xué)習(xí)筆記 | HarmonyOS的頁(yè)面間跳轉(zhuǎn)

開(kāi)發(fā) 前端 OpenHarmony
說(shuō)到頁(yè)面跳轉(zhuǎn)就不得不提到Ability,Ability是應(yīng)用所具備能力的抽象,一個(gè)應(yīng)用可以具備多種能力(即可以包含多個(gè)Ability)。

[[424775]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

前言

大家好,我又回來(lái)啦。這一星期的學(xué)習(xí)時(shí)間又到了。那我們?cè)谇皫讉€(gè)星期講的都是harmonyOS里的分布式能力,可能學(xué)起來(lái)會(huì)相對(duì)較難一點(diǎn),那我們這一星期就找了個(gè)簡(jiǎn)單一點(diǎn)的來(lái)學(xué),那這就是頁(yè)面間的跳轉(zhuǎn)了。雖然這和分布式能力毫無(wú)相關(guān)也比較簡(jiǎn)單,但也不是說(shuō)明這就不重要了,在所有的應(yīng)用中都基本涉及到了這一個(gè)能力,把這學(xué)好了,也可以為我們后面的應(yīng)用開(kāi)發(fā)打下一個(gè)非常良好的基礎(chǔ)。

那現(xiàn)在就先開(kāi)始我們這星期的西之旅吧!

[[424776]]

正文

說(shuō)到頁(yè)面跳轉(zhuǎn)就不得不提到Ability,Ability是應(yīng)用所具備能力的抽象,一個(gè)應(yīng)用可以具備多種能力(即可以包含多個(gè)Ability)。Page Ability可以用于提供與用戶交互的能力,一個(gè)Page可以由一個(gè)或多個(gè)AbilitySlice構(gòu)成的,那AbilitySlice又是什么呢,AbilitySlice可以用于實(shí)現(xiàn)一個(gè)頁(yè)面的邏輯。

創(chuàng)建工程

還是和往常一樣,創(chuàng)建一個(gè)名為MyJump的手機(jī)應(yīng)用。

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

一個(gè)page包含多個(gè)AbilitySlice

設(shè)置UI界面

在graphic目錄下增加一個(gè)background_button的文件,這個(gè)文件可以用于我們按鈕的背景的設(shè)置。

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.        ohos:shape="rectangle"
  4.     <solid 
  5.         ohos:color="#007DFF"/> 
  6.     <corners 
  7.         ohos:radius="100"/> 
  8. </shape> 

接下來(lái)到layout目錄下增加一個(gè)名為ability_second的文件。

 

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:alignment="center" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Text 
  10.         ohos:height="match_content" 
  11.         ohos:width="match_content" 
  12.         ohos:id="$+id:text_second" 
  13.         ohos:background_element="$graphic:background_ability_main" 
  14.         ohos:layout_alignment="horizontal_center" 
  15.         ohos:text="This is SecondAbility" 
  16.         ohos:text_size="30vp"/> 
  17.     <Button 
  18.         ohos:height="match_content" 
  19.         ohos:width="match_parent" 
  20.         ohos:id="$+id:button_second" 
  21.         ohos:background_element="$graphic:background_button" 
  22.         ohos:text="返回" 
  23.         ohos:text_color="#FFFFFF" 
  24.         ohos:text_size="19vp" 
  25.         ohos:top_padding="8vp" 
  26.         ohos:bottom_padding="8vp" 
  27.         ohos:top_margin="20vp"/> 
  28. </DirectionalLayout> 

跳轉(zhuǎn)動(dòng)作的實(shí)現(xiàn)

接下來(lái)我們就要在Slice目錄下增加一個(gè)類,名為SecondAbilitySlice。

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
  1. package com.example.myjump.slice; 
  2.  
  3. import com.example.myjump.ResourceTable; 
  4. import ohos.aafwk.ability.Ability; 
  5. import ohos.aafwk.content.Intent; 
  6.  
  7. public class SecondAbilitySlice extends AbilitySlice { 
  8.     @Override 
  9.     protected void onStart(Intent intent) { 
  10.         super.onStart(intent); 
  11.         super.setUIContent(ResourceTable.Layout_ability_second); 
  12.     } 
  13.  
  14.     @Override 
  15.     protected void onActive() { 
  16.         super.onActive(); 
  17.     } 
  18.  
  19.     @Override 
  20.     protected void onForeground(Intent intent) { 
  21.         super.onForeground(intent); 
  22.     } 

接下來(lái)是MainAbilitySlice里編寫代碼,使得點(diǎn)擊按鈕能跳轉(zhuǎn)到SecondAbilitySlice。

  1. Button buttonsecond = (Button)findComponentById(ResourceTable.Id_page1); 
  2.    buttonsecond.setClickedListener(new Component.ClickedListener() { 
  3.        @Override 
  4.        public void onClick(Component component) { 
  5.            Intent intent1 = new Intent(); 
  6.            present(new SecondAbilitySlice(),intent1); //跳轉(zhuǎn)到其他頁(yè)面 
  7.        } 
  8.    }); 

那跳轉(zhuǎn)到了SecondAbilitySlice,總要有一個(gè)按鈕可以跳轉(zhuǎn)回原來(lái)的頁(yè)面吧,那我們接下來(lái)就編寫代碼,使得點(diǎn)擊按鈕可以銷毀當(dāng)前頁(yè)面,返回MainAbilitySlice。

  1. Button button = (Button)findComponentById(ResourceTable.Id_button_second); 
  2.      button.setClickedListener(new Component.ClickedListener() { 
  3.          @Override 
  4.          public void onClick(Component component) { 
  5.              terminate(); //銷毀當(dāng)前頁(yè)面 
  6.          } 
  7.      }); 
【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

那有的人就說(shuō)了,這個(gè)頁(yè)面的數(shù)據(jù)也想帶到那個(gè)頁(yè)面應(yīng)該怎么辦呢。沒(méi)事不慌,問(wèn)題不大。接下來(lái)我們就來(lái)解決攜帶數(shù)據(jù)的問(wèn)題。

我們可以在跳轉(zhuǎn)動(dòng)作執(zhí)行之前,將數(shù)據(jù)以鍵值對(duì)的形式儲(chǔ)存到網(wǎng)絡(luò)中(intent),讓其帶到另外一個(gè)頁(yè)面。

  1. intent1.setParam("key","the ability is same!"); //將數(shù)據(jù)儲(chǔ)存到intent中,讓其以形參的形式傳到另外一個(gè)頁(yè)面 

然后在SecondAbilitySlice中先定義一個(gè)輸出控制臺(tái),用于輸出intent中攜帶的數(shù)據(jù),然后在onStart里輸出對(duì)應(yīng)的數(shù)據(jù)。

  1. HiLog.info(TAG, intent.getStringParam("key")); //用于輸出intent中攜帶的key對(duì)應(yīng)的數(shù)據(jù) 

那怎么將銷毀的頁(yè)面的數(shù)據(jù)往回帶呢,是不是還是用相同的方法呢。那方法也挺相識(shí)的,也是將數(shù)據(jù)寫到intent中,然后調(diào)用setResult函數(shù),然后將intent傳到該函數(shù)里面。在點(diǎn)擊函數(shù)里的代碼如下:

  1. Intent intent1 = new Intent(); 
  2.            intent1.setParam("second","我是SecondAbility!"); 
  3.            setResult(intent1); 
  4.            terminate(); //銷毀當(dāng)前頁(yè)面 

那這個(gè)setResult()函數(shù)有什么用呢,這個(gè)函數(shù)調(diào)用之后呢,在MainAbilitySlice里就會(huì)調(diào)用onResult()函數(shù),同時(shí)我們應(yīng)該將頁(yè)面跳轉(zhuǎn)所用到的present()函數(shù)改為presentForResult()函數(shù),在這個(gè)函數(shù)里面多了一個(gè)請(qǐng)求碼的參數(shù),請(qǐng)求碼是用于標(biāo)識(shí)某一個(gè)請(qǐng)求的,也就是用來(lái)區(qū)分是哪個(gè)頁(yè)面銷毀頁(yè)面之后返回的,請(qǐng)求碼是一個(gè)非負(fù)的整數(shù),我們就定義請(qǐng)求碼為0,然后調(diào)用presentForResult函數(shù)。

  1. presentForResult(new SecondAbilitySlice(),intent1, request_code); //跳轉(zhuǎn)到其他頁(yè)面 

在onResult()函數(shù)中,會(huì)傳來(lái)兩個(gè)參數(shù),一個(gè)就是網(wǎng)絡(luò)resultIntent,另外一個(gè)就是請(qǐng)求碼requestCode,這個(gè)請(qǐng)求碼就是用來(lái)區(qū)分是哪個(gè)頁(yè)面銷毀之后返回來(lái)的。例如我們剛剛在用presentForResult跳轉(zhuǎn)到SecondAbilitySlice時(shí)用的請(qǐng)求碼就為0,那從SecondAbilitySlice返回的請(qǐng)求碼就是0。那onResult怎么重寫呢,代碼如下:

  1. @Override 
  2.    protected void onResult(int requestCode, Intent resultIntent) { 
  3.        super.onResult(requestCode, resultIntent); 
  4.        //這個(gè)requestCode可以用來(lái)區(qū)分是哪個(gè)頁(yè)面返回的數(shù)據(jù),我們剛剛傳遞的請(qǐng)求碼為0,那從SecondAbilitySlice返回的請(qǐng)求碼就為0 
  5.        if(resultIntent != null && requestCode == request_code) { 
  6.            HiLog.info(TAG, resultIntent.getStringParam("second")); 
  7.        } 
  8.    } 

那再次運(yùn)行程序,和剛剛程序的區(qū)別就是在輸出臺(tái)會(huì)輸出下面兩句話:

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

第一句話是在MainAbilitySlice點(diǎn)擊按鈕跳轉(zhuǎn)到SecondAbilitySlice時(shí),在SecondAbilitySlice輸出的,另外一句是在SecondAbilitySlice點(diǎn)擊返回,在MainAbilitySlice輸出的。

一個(gè)page包含一個(gè)AbilitySlice

在com.example.myjump目錄下新建一個(gè)page ability,命名為ThirdAbility。

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

在ability_third設(shè)置界面

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:alignment="center" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Text 
  10.         ohos:height="match_content" 
  11.         ohos:width="match_content" 
  12.         ohos:id="$+id:text_third" 
  13.         ohos:background_element="$graphic:background_ability_third" 
  14.         ohos:layout_alignment="horizontal_center" 
  15.         ohos:text="This is ThirdAbility" 
  16.         ohos:text_size="30vp"/> 
  17.     <Button 
  18.         ohos:height="match_content" 
  19.         ohos:width="match_parent" 
  20.         ohos:id="$+id:button_third" 
  21.         ohos:background_element="$graphic:background_button" 
  22.         ohos:text="返回" 
  23.         ohos:text_color="#FFFFFF" 
  24.         ohos:text_size="19vp" 
  25.         ohos:top_padding="8vp" 
  26.         ohos:bottom_padding="8vp" 
  27.         ohos:top_margin="20vp"/> 
  28. </DirectionalLayout> 

編寫跳轉(zhuǎn)動(dòng)作

在MainAbilitySlice編寫代碼,完成點(diǎn)擊按鈕跳轉(zhuǎn)到ThirdAbilitySlice去。

先構(gòu)建一個(gè)Intent.OperationBuilder實(shí)例,然后鏈?zhǔn)秸{(diào)用withDeviceId、withBundleName、withAbilityName、build。

  1. Button buttonthird = (Button)findComponentById(ResourceTable.Id_page2); 
  2.         buttonthird.setClickedListener(new Component.ClickedListener() { 
  3.             @Override 
  4.             public void onClick(Component component) { 
  5.                 Intent intent1 = new Intent(); 
  6.                 Operation operation = new Intent.OperationBuilder() //構(gòu)建一個(gè)Intent.OperationBuilder實(shí)例 
  7.                         .withDeviceId(""
  8.                         .withBundleName(getBundleName()) 
  9.                         .withAbilityName(ThirdAbility.class.getName()) 
  10.                         .build(); 
  11.                 intent1.setOperation(operation); 
  12.                 startAbility(intent1); 
  13.             } 
  14.         }); 

那同樣的,我們還需要在ThirdAbilitySlice中編寫代碼,完成點(diǎn)擊返回按鈕銷毀當(dāng)前頁(yè)面,銷毀ThirdAbilitySlice,回到MainAbilitySlice。那有人就覺(jué)得用剛才那個(gè)terminate函數(shù)不就行了嗎,那這就大錯(cuò)特錯(cuò)了,在一個(gè)Ability下的不同AbilitySlice就是這樣子銷毀頁(yè)面的,但在不同的Ability下的話,需要調(diào)用terminateAbility函數(shù),那我們就在點(diǎn)擊事件中去調(diào)用這個(gè)函數(shù)。

  1. Button button = (Button)findComponentById(ResourceTable.Id_button_third); 
  2.   button.setClickedListener(new Component.ClickedListener() { 
  3.       @Override 
  4.       public void onClick(Component component) { 
  5.           terminateAbility(); 
  6.       } 
  7.   }); 

運(yùn)行一下查看結(jié)果。

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)
【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

解決攜帶數(shù)據(jù)的問(wèn)題

首先怎么把MainAbilitySlice的數(shù)據(jù)帶到ThirdAbilitySlice呢,還是和剛剛是相同的,把數(shù)據(jù)以鍵值對(duì)的形式寫到intent中,而且還是用相同的方法setParam。

  1. intent1.setParam("key","the ability is different!"); 

接下來(lái)還是相同的,在ThirdAbilitySlice里面定義一個(gè)輸出控制臺(tái),然后把intent攜帶的數(shù)據(jù)在onStart輸出出來(lái)。

相似的,我們接下來(lái)還是實(shí)現(xiàn)怎么銷毀頁(yè)面之后把數(shù)據(jù)也帶到MainAbility。那我們還是仍然把數(shù)據(jù)寫到intent中,然后調(diào)用getAbility().setResult(),這個(gè)函數(shù)里面有兩個(gè)參數(shù),第二個(gè)就是那個(gè)intent,第一個(gè)是一個(gè)響應(yīng)碼,這個(gè)響應(yīng)碼是用于標(biāo)識(shí)某一次響應(yīng)的,作用也和剛剛的標(biāo)識(shí)碼是相識(shí)的。這里我們就定義一個(gè)響應(yīng)碼為1,然后調(diào)用該函數(shù)。最后調(diào)用terminAbility函數(shù)來(lái)實(shí)現(xiàn)頁(yè)面的銷毀。

  1. HiLog.info(TAG, intent.getStringParam("key")); //用于輸出intent中攜帶的key對(duì)應(yīng)的數(shù)據(jù) 
  2.       Button button = (Button)findComponentById(ResourceTable.Id_button_third); 
  3.       button.setClickedListener(new Component.ClickedListener() { 
  4.           @Override 
  5.           public void onClick(Component component) { 
  6.               Intent intent1 = new Intent(); 
  7.               intent1.setParam("third","我是從ThirdAbility來(lái)的!"); 
  8.               getAbility().setResult(resultCode, intent1); 
  9.               terminateAbility(); 
  10.           } 
  11.       }); 

這樣子我們就完成了頁(yè)面的銷毀工作了,下面我們需要在MainAbilitySlice來(lái)接受頁(yè)面銷毀后帶來(lái)的數(shù)據(jù)。同樣的還是把startAbility()改為startAbilityForResult(),然后在參數(shù)里面多加一個(gè)響應(yīng)碼。然后再重寫onAbilityResult函數(shù),當(dāng)頁(yè)面銷毀之后,會(huì)自動(dòng)調(diào)用該函數(shù),那我們就可以在這個(gè)函數(shù)里面接收數(shù)據(jù)了。在該函數(shù)中會(huì)有三個(gè)參數(shù),第一個(gè)參數(shù)是請(qǐng)求碼,也就是我們最開(kāi)始在MainAbilitySlice里跳轉(zhuǎn)到ThirdAbilitySlice時(shí)的參數(shù),第二個(gè)是一個(gè)響應(yīng)碼,也是我們剛剛在getAbility().setResult()中設(shè)置的參數(shù),最后一個(gè)就是那個(gè)intent了,數(shù)據(jù)也是在這個(gè)里面的。

  1. @Override 
  2.   protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { 
  3.       super.onAbilityResult(requestCode, resultCode, resultData); 
  4.       if (requestCode == request_code && resultCode == result_code && resultData != null) { 
  5.           HiLog.info(TAG, resultData.getStringParam("third")); 
  6.       } 
  7.   } 

那就讓我們來(lái)看看運(yùn)行的效果吧!

【木棉花】學(xué)習(xí)筆記--頁(yè)面間跳轉(zhuǎn)-鴻蒙HarmonyOS技術(shù)社區(qū)

第一句話是點(diǎn)擊“jump to ThirdAbility”按鈕時(shí)跳轉(zhuǎn)到ThirdAbilitySlice頁(yè)面輸出的,另外一句是點(diǎn)擊返回按鈕銷毀頁(yè)面回到MainAbilitySlice輸出的。

結(jié)語(yǔ)

源碼我會(huì)放到附件中的,有需求的可以自行下載自行學(xué)習(xí),大家有什么看不懂的地方可以私信問(wèn)我或者對(duì)照源碼進(jìn)行學(xué)習(xí)。

https://harmonyos.51cto.com/resource/1251

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-01-05 10:35:04

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2011-04-12 17:16:52

Activity跳轉(zhuǎn)開(kāi)發(fā)實(shí)例Android學(xué)習(xí)筆記

2010-05-11 16:55:12

Windows Pho

2021-05-18 09:49:08

鴻蒙HarmonyOS應(yīng)用

2021-06-22 16:40:32

鴻蒙HarmonyOS應(yīng)用

2010-08-05 09:39:17

Flex頁(yè)面跳轉(zhuǎn)

2009-07-03 17:24:31

Servlet頁(yè)面跳轉(zhuǎn)

2015-05-05 10:51:32

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

2010-08-13 13:25:53

Flex頁(yè)面跳轉(zhuǎn)

2009-12-02 19:42:24

PHP頁(yè)面自動(dòng)跳轉(zhuǎn)

2009-12-02 20:02:18

PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)

2009-07-03 17:48:24

JSP頁(yè)面跳轉(zhuǎn)

2021-01-04 11:44:05

鴻蒙HarmonyOSAbilitySlic

2009-12-24 17:57:53

WPF頁(yè)面跳轉(zhuǎn)

2009-07-02 09:25:41

JSP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)

2024-01-03 08:22:32

移動(dòng)應(yīng)用頁(yè)面跳轉(zhuǎn)

2009-09-04 16:10:49

JSP頁(yè)面間傳遞參數(shù)

2012-04-19 16:41:24

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

2011-05-11 16:54:49

JSP

2009-12-16 17:24:26

Ruby on Rai
點(diǎn)贊
收藏

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