鸿蒙应用开发入门(六):页面间跳转

目录:
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/

posted @ 2020-12-29 14:10  HarmonyOS技术社区  阅读(2047)  评论(0编辑  收藏  举报