花粉乐分享平台宣传视频
> 华为资讯 > 华为资讯 > 鸿蒙编程 > 鸿蒙中Page Ability之间2个目的地4种类型的页面导航
鸿蒙中Page Ability之间2个目的地4种类型的页面导航
来源:带娃学编程1001
2022-12-01 13:54:59
434
管理

鸿蒙中,Page Ability中可能含有多个Slice页面,其中有一个Slice是主页面(通过super.setMainRoute(TargetPageSlice.class.getName())设置)。Page Ability相当于一个画板,而Slice相当于粘贴到画板上的各幅图画,除了之前所写的同一Page Ability内各个Slice页面之间的导航,开发中还会用到各个Page Ability之间的导航,并涉及到导航到目标Page Ability中的不同Slice页面。根据导航到不同的Slice页面和是否带参数、是否有返回值,经组合可形成8种方式。但只要掌握带参数、有返回值的方法,其它就很简单了。

假设起始Page Ability类为MainAbility,起始页面为MainAbilitySlice,目的Page Ability类为TargetPage,其中含有2个页面,主页面为TargetPageSlice,另一个页面为TargetPageSlice2,先做准备工作,在TargetPage中添加另一个Slice页面:

在新建TargetPage类时,系统已自动在config.json中添加了一个ability,手动在其中添加actions内容:

"skills": [ { "actions": [ "action.intent.p2s2" ] } ],在TargetPage类中添加页面action

addActionRoute("action.intent.p2s2",TargetPageSlice.class.getName());

一、导航到目标Page Ability主页面(有参数有返回值)

在MainAbilitySlice的onStart中为按钮添加回调函数代码:

Intent it = new Intent();Operation op = new Intent.OperationBuilder() .withDeviceId("") //导航到本机 .withBundleName("com.example.pagenav") //导航到该应用 //导航到目的Page Ability .withAbilityName("com.example.pagenav.TargetPage") .build(); //将上述参数放在operation中it.setOperation(op); //把operation放到intent中it.setParam("p1s","from p1s");//设置导航的参数startAbilityForResult(it,rqcode);//预先定义一个请求码rqcode在TargetPageSlice中获取到参数

String prm = Intent.getStringParam("p1s")在TargetPageSlice中设置返回值,并退出当前ability

Intent it = new Intent();it.setParam("result","p2s1 data");getAbility().setResult(rscode,it);//预先定义类似请求码的rscode,即resultCodeterminateAbility();//退出当前ability,或terminate()退出当前slice;在MainAbilitySlice中重写onAbilityResult方法获取到返回值

@Overrideprotected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { super.onAbilityResult(requestCode, resultCode, resultData); if(resultCode != rscode || resultData == null ) return; String result = resultData.getStringParam("result");}

如果是无参数,则用startAbility(it)替换startAbilityForResult(it,rqcode);

如果是无返回值,则在TargetPageSlice中处理完相关逻辑后直接terminateAbility()或terminate()退出返回。

二、导航到目标Page Ability其它页面

用withAction方法可以导航到事先定义好action(在config.json中定义)的页面上

Intent it = new Intent();Operation op = new Intent.OperationBuilder() .withAction(TargetPage.action) .build();it.setOperation(op);startAbility(it);

withAction也可以导航到系统定义的页面上,如IntentConstants.ACTION_DIAL是拨号页面等。

App的业务逻辑上都会涉及各页面之间的导航,所以掌握各Page Ability以及各Ability Slice之间带参数、有返回值的导航方法就非常重要了。

花粉社群VIP加油站

2
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
回眸一句草泥..(采蜜高手)
文章
791
主题
7
关注
0
粉丝
1
点击领取今天的签到奖励!
签到排行
随手拍
54个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备17046585号
2
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索