购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1.1 Page的好伙伴AbilitySlice

1.AbiltySlice是用户界面的直接承载者

1个Page可以包含1个或1组与功能相关的用户界面,其中每个独立的用户界面都被1个AbilitySlice所管理,Page与AbilitySlice的关系如图3-1所示。虽然在Page中能够直接进行用户界面编程,但是一般情况下AbilitySlice才是用户界面的直接承载者。建议将与功能相关或相似的AbilitySlice由统一的Page对象进行管理。例如,当我们需要设计一个视频的播放功能时,可以将一个AbilitySlice设计为播放界面,将另一个AbilitySlice设计为视频的评论界面,而这两个AbilitySlice均由同一个Ability进行管理。

注意: 这里的AbilitySlice的概念和Android中的Fragment颇有些相似,但是,目前1个Page上只能显示1个AbilitySlice,而Android中的Activity能够同时承载并显示多个Fragment。

在通过DevEco Studio创建Empty Feature Ability(Java)类型的鸿蒙应用程序工程时,默认会自动创建1个Page及与此关联的1个AbilitySlice。在第2章所创建的HelloWorld工程中,自动创建的MainAbility类就是一个典型的Page。除此之外,在com.example.helloworld.slice包中还自动创建了1个MainAbilitySlice类,而这个类就是1个AbilitySlice。MainAbility和MainAbilitySlice类文件的所在位置如图3-2所示。

图3-1 Feature Ability(FA)与AbilitySlice的关系

图3-2 MainAbility和MainAbilitySlice类文件所在位置

总结一下,使用AbilitySlice时开发者需要时刻注意以下3个核心要点:

(1)虽然Page也能够承载用户界面,但是仍然建议开发者使用AbilitySlice。

(2)被同一个Page管理的AbilitySlice需要具有高度相关性。

(3)在一个应用程序运行的过程中,同一时刻有且只能有一个AbilitySlice处于前台状态。

2.AbilitySlice主路由

AbilibySlice之间的跳转关系被称为AbilitySlice路由。其中,打开Page时默认启动的AbilitySlice称为该Page的AbilitySlice主路由(Main Route)。关于Page和Ability的跳转将在3.3节中进行详细介绍,这里仅介绍AbilitySlice的主路由设置方法。

大家回顾一下MainAbility的代码,其中只包含了一个onStart方法。这个onStart方法是每次加载MainAbility时所必须调用(且只调用一次)的生命周期方法。关于生命周期方法将会在3.1.3节中进行详细介绍,这里只需知道onStart方法是MainAbility的“入口”方法。

在该方法中,调用了父类的setMainRoute方法,即为AbilitySlice的主路由设置方法,用于定义该Page默认启动的AbilitySlice,代码如下:

这种方法需要传递一个参数,即目标AbilitySlice的全类名字符串(即包名+类名字符串)。AbilitySlice类的全类名字符串可以通过其class对象的getName()方法获得。

MainAbilitySlice的全类名字符串为com.example.helloworld.slice.MainAbilitySlice。通过将该字符串传递到setMainRoute方法用于指定MainAbility的AbilitySlice主路由为MainAbilitySlice。此时,启动MainAbility时就会默认启动MainAbilitySlice。 IC8hVf9UIYJQzTmWJQTKEuxdfKxuGOsr+w3L/avlszVb9I5guP76j9y7lFuDJfJE

点击中间区域
呼出菜单
上一章
目录
下一章
×