1. 程式人生 > 實用技巧 >鴻蒙應用開發入門(六):頁面間跳轉

鴻蒙應用開發入門(六):頁面間跳轉

目錄:
1. 認識Intent
2. 瞭解AbilitySlice路由配置
3. 同一個Page裡的AbilitySlice1與AbilitySlice2間的跳轉(無參,帶參,回值)

6.1 頁面間跳轉

  1. 認識Intent
    Intent是物件之間傳遞資訊的載體。
    例如,當一個Ability需要啟動另一個Ability時,或者一個AbilitySlice需要導航到另一個AbilitySlice時,可以通過Intent指定啟動的目標同時攜帶相關資料。Intent的構成元素包括Operation與Parameters:

  2. 瞭解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"
]
}
]
...
}
]
...
}
...
}

  1. 同一個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/