zoukankan      html  css  js  c++  java
  • 鸿蒙应用开发入门(六):页面间跳转

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

  • 相关阅读:
    在ChemDraw中输入千分号的方法
    将几何画板x轴坐标值换成弧度制的方法
    几何画板怎么会出现符号乱码
    几何画板绘制正方形网格的技巧
    怎么用ChemDraw 15.1 Pro绘制彩色结构
    深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
    IIS下PHP的ISAPI和FastCGI比较
    非常好用的两个PHP函数 serialize()和unserialize()
    为什么要让我们的“领域模型”裸奔?
    依赖注入
  • 原文地址:https://www.cnblogs.com/HarmonyOS/p/14206278.html
Copyright © 2011-2022 走看看