鴻蒙應用開發入門(六):頁面間跳轉
目錄:
1. 認識Intent
2. 瞭解AbilitySlice路由配置
3. 同一個Page裡的AbilitySlice1與AbilitySlice2間的跳轉(無參,帶參,回值)
6.1 頁面間跳轉
-
認識Intent
Intent是物件之間傳遞資訊的載體。
例如,當一個Ability需要啟動另一個Ability時,或者一個AbilitySlice需要導航到另一個AbilitySlice時,可以通過Intent指定啟動的目標同時攜帶相關資料。Intent的構成元素包括Operation與Parameters:
-
瞭解AbilitySlice路由配置
雖然一個Page可以包含多個AbilitySlice,但是Page進入前臺時介面預設只展示一個AbilitySlice。預設展示的AbilitySlice是通過setMainRoute()方法來指定的。當有多個需要展示的AbilitySlice,可以通過addActionRoute()方法為MainAbilitySlice以外的AbilitySlice配置路由規則。此時,當其他Page例項期望導航到這些AbilitySlice時,可以通過AbilitySlice之間的跳轉,顯示出這張頁面。
public class MyAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
// set the main route
setMainRoute(MainSlice.class.getName());
// set the action route addActionRoute("action.pay", PaySlice.class.getName()); addActionRoute("action.scan", ScanSlice.class.getName()); }
}
addActionRoute()方法中使用的動作命名,需要在應用配置檔案(config.json)中註冊:
{
"module": {
"abilities": [
{
"skills":[
{
"actions":[
"action.pay",
"action.scan"
]
}
]
...
}
]
...
}
...
}
- 同一個Page裡的AbilitySlice1與AbilitySlice2間的跳轉(無參,帶參,回值)
1)無引數跳轉
@Override public 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(); present(new MainAbilitySlice1(),intent1); }); }
2)帶引數跳轉
(1)產生引數端的AbilitySlice
@Override
public 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("user","鍾發發");
present(new MainAbilitySlice1(),intent1);
});
}
(2)接收引數端的AbilitySlice
public class MainAbilitySlice1 extends AbilitySlice {
Text text;
String oldText;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main1);
text = (Text) findComponentById(ResourceTable.Id_text_helloworld1);
if(intent != null){
String user = intent.getStringParam("user");
oldText = text.getText();
text.append("," + user);
}
}
@Override
protected void onInactive() {
super.onInactive();
}
....
}
作者:zhonghongfa
想了解更多內容,請訪問: 51CTO和華為官方戰略合作共建的鴻蒙技術社群https://harmonyos.51cto.com/