探索鸿蒙(HarmonyOS):AbilitySlice间导航和传递参数

本文详细介绍了在鸿蒙系统中,如何在AbilitySlice之间进行导航并传递参数。通过建立目标AbilitySlice,配置config.json文件,使用addActionRoute()添加路由,以及使用present()和presentForResult()方法实现带参数和不带参数的导航。同时,文章阐述了接收返回结果的过程,包括在目标AbilitySlice中设置结果,并在原AbilitySlice中通过onResult()接收和处理结果。

官方文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-switching-0000000000037999

据官方文档记载:

  1. 当发起导航的AbilitySlice和导航目标的AbilitySlice处于同一个Page时,您可以通过present()方法实现导航。
  2. 如果开发者希望在用户从导航目标AbilitySlice返回时,能够获得其返回结果,则应当使用presentForResult()实现导航。用户从导航目标AbilitySlice返回时,系统将回调onResult()来接收和处理返回结果,开发者需要重写该方法。返回结果由导航目标AbilitySlice在其生命周期内通过setResult()进行设置。

具体介绍如下:

一、步骤

1.建立目标AbilitySlice,包括类文件和layout文件。

2.在config.json文件中添加action。

3.在对应的Ability中,使用addActionRounte()方法添加路由。

4.调用present()方法或presentForResult()实现导航。

二、示例说明

工程名:AbilitySliceSample

https://download.youkuaiyun.com/download/Tulipsys/20003600

说明:

1.MainAbilitySlice包含两个按钮“Goto Slice 1”和“Goto Slice 2”,点击后分别打开AbilitySliceOne和AbilitySliceTwo。

2.打开AbilitySliceOne只是打开,什么也不做。

3.打开AbilitySliceTwo的时候传递数据,AbilitySliceTwo进行展示并修改。从AbilitySliceTwo返回后,MainAbilitySlice接受修改后的数据并展示。

三、重点部分说明

1. 建立目标AbilitySlice

创建了AbilitySliceOne和AbilitySliceTwo。

2. 在config.json文件中添加action

"actions": [

  "action.system.home",

  "action.slice1",

  "action.slice2"

]

action.slice1、action.slice2分别用于标记指向AbilitySliceOne和AbilitySliceTwo。

3. 使用addActionRounte()方法添加路由

在MainAbility的onStart()中使用使用addActionRounte()方法添加路由:

  1. addActionRoute("action.slice1", AbilitySliceOne.class.getName());
  2. addActionRoute("action.slice2", AbilitySliceTwo.class.getName());

个人理解这一步是把action字符串和AbilitySlice类做关联。

4.实现导航

4.1 不传递参数的导航

点击button1“Goto Slice 1”,打开AbilitySliceOne,不传递参数,一句话就够了:

present(new AbilitySliceOne(), intent);

示例中还加了个Operation,在示例中其实跟上面的一句话效果一样。Operation能干的事挺多的。

Intent intent = new Intent();

Operation operation = new Intent.OperationBuilder()

        .withBundleName(getBundleName())

        .withAbilityName(AbilitySliceOne.class.getName())

        .withAction("action.slice1")

        .build();

intent.setOperation(operation);

present(new AbilitySliceOne(), intent);

4.2 传递参数的导航

点击button2“Goto Slice 2”,打开AbilitySliceTwo,这儿要传递参数。示例中设置了一个Student类,在打开AbilitySliceTwo的时候把Student的Name和Age数据传递给AbilitySliceTwo。

传递参数的原理是把数据放到Intent中,然后把Intent“发送”给目标AbilitySlice。Intent的构成元素包括Operation与Parameters。Intent官方文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-intent-0000000000038799

示例中这么写的:

Intent intent = new Intent();

Operation operation = new Intent.OperationBuilder()

        .withBundleName(getBundleName())

        .withAbilityName(AbilitySliceTwo.class.getName())

        .withAction("action.slice2")

        .build();

intent.setOperation(operation);

intent.setParam("name", student.getName());

intent.setParam("age", student.getAge());

presentForResult(new AbilitySliceTwo(), intent, 0);

把数据放到Intent用的就是:

intent.setParam("name", student.getName());

intent.setParam("age", student.getAge());

注意这儿要接收AbilitySliceTwo的返回结果,所以用presentForResult():

presentForResult(new AbilitySliceTwo(), intent, 0);

5.接收返回结果

接收返回结果要做两个事情:

1.目标AbilitySlice要返回结果。示例中,AbilitySliceTwo打开后首先接收数据,然后修改数据并用setResult()返回结果。

返回结果用的还是Intent(Intent是对象之间传递信息的载体):

        Intent resultIntent = new Intent();

        resultIntent.setParam("name", "Will");

        resultIntent.setParam("age", "36");

        setResult(resultIntent);

2.原AbilitySlice接收结果。示例中,MainAbilitySlice导航到AbilitySlice2后等待返回结果,收到后展示到界面。接收数据在onResult()中:

    @Override

    protected void onResult(int requestCode, Intent resultIntent) {

        if (requestCode == 0) {

            student.setName(resultIntent.getStringParam("name"));

            student.setAge(Integer.parseInt(resultIntent.getStringParam("age")));

            nameText.setText("NAME: " + student.getName());

            ageText.setText("AGE: " + String.valueOf(student.getAge()));

        }

    }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tulipsys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值