关于创建一个新页面,官方文档里的示例是否有误?

人类新新
发布于 2020-10-19 08:41
浏览
0收藏

不知道各位有没有看过 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/start-second-page-0000000000029619,左侧快速入门/创建另一个页面的示例代码,要求去选择“New > Ability > Empty Feature Ability(Java)”。

然后在跳转的时候需要调用以下代码:

Intent secondIntent = new Intent();
               // 指定待启动FA的bundleName和abilityName
               Operation operation = new Intent.OperationBuilder()
                       .withDeviceId("")
                       .withBundleName("com.example.myapplication")
                       .withAbilityName("com.example.myapplication.SecondAbility")
                       .build();
               secondIntent.setOperation(operation);
               startAbility(secondIntent); // 通过AbilitySlice的startAbility接口实现启动另一个页面


但之后在看Ability模块的介绍时又写着:AbilitySlice间导航里如果两个AbilitySlice处于同一个Page的话只需要

button.setClickedListener(listener -> present(new TargetSlice(), new Intent()));

就直接可以完成跳转了,试了下的确可以直接跳,并且都不需要单独建一个Ability,然后再调用super.setMainRoute(XXXXAbilitySlice.class.getName());

也就是说只要建一个XXXXSlice extends AbilitySlice就可以了。

然后在代码中调用present(new XXXXSlice (), new Intent()));便可成功跳转。

实在是没搞懂官网示例的这个创建另一个页面以及跳转示例代码是什么场景,似乎唯一区别就是用“New > Ability > Empty Feature Ability(Java)”的方式创建出来的会在config.json中有对应的配置:

 {        "orientation": "landscape",
        "formEnabled": false,
        "name": "com.mazda.firsthmp.SecondAbility",
        "icon": "$media:icon",
        "description": "$string:secondability_description",
        "label": "entry",
        "type": "page",
        "launchType": "standard"  }


类似android开发的manifest中声明了新的activity,大家来讨论下吧

分类
收藏
回复
举报
2条回复
按时间正序
/
按时间倒序
hackernew
hackernew

示例代码给的是两个ability之间的跳转,楼主这种写法是两个abilitySlice之间的跳转。

 

 

我个人理解两种场景的区分在于如果是同一个业务的两个页面跳转,用楼主的写法,比如文档里举的例子“当一个Page由多个AbilitySlice共同构成时,这些AbilitySlice页面提供的业务能力应具有高度相关性。例如,新闻浏览功能可以通过一个Page来实现,其中包含了两个AbilitySlice:一个AbilitySlice用于展示新闻列表,另一个AbilitySlice用于展示新闻详情。”

 


如果是两个业务之间的页面跳转,比如从美团跳到支付宝这种场景,就是用官网示例代码的这种跳转了。

 


个人拙见,请多指正。

回复
2020-10-19 09:07:24
hushuo
hushuo

对的,所以说如果是自己开发的独立应用,类似新闻这种从列表页跳到详情页,那么只需要简单的建两个slice进行跳转就行了。

但是像你说的大众点评支付需要跳支付宝或者微信支付之类的,是几个不同Ability之间的跳转,举个例子类似android你要在自己app里去打开一个网页,但是你手机里装了多个浏览器,此时打开就是通过指定Action和Entity去找匹配的Ability,这样的跳转是跨应用的,这么理解吧。

 

我的理解Ability更像是一个个单独的App,Ability和Ability间的跳转可以发生在两个完全不相干的独立的Ability之间,slice更偏向是自己app内部的页面之间的跳转。不知道理解的对不对,就好比android你在应用a里面去通过指定action打开一个网页,此时会调起手机内安装的所有满足要求的app。这种场景就等于是自己的Ability去跳转别人的Ability

回复
2020-10-19 11:15:00
回复
    相关推荐