更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz页面模板(以下简称“页面”)为FA唯一支持的模板,用于提供与用户交互的能力。一个Page可以由一个或多个AbilitySlice组成,一个AbilitySlice是指一个应用的单个页面及其控制逻辑的总和。当一个Page由多个AbilitySlice组成时,这些AbilitySlice页面提供的业务能力应该是高度相关的。例如,可以通过一个Page实现新闻浏览功能,Page包含两个AbilitySlice:一个AbilitySlice用于显示新闻列表,另一个AbilitySlice用于显示新闻详情。本节主要演示当一个Page包含多个AbilitySlices时,如何在AbilitySlices之间进行路由和导航。使用Car设备类型创建应用程序并创建AbilitySliceNavigation应用程序。本应用主要用于测试AbilitySlices之间的路由和导航。创建多个AbilitySlice在初始化应用时,AbilitySliceNavigation应用已经包含了一个mainAbilitySlice,即publicclassMainAbilitySliceextendsAbilitySlice{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);}@Overridepublicon(Active){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}}因此,需要再添加一个AbilitySlice。我们复制MainAbilitySlice的代码并创建一个PayAbilitySlice。目前,MainAbilitySlice和PayAbilitySlice的代码是相同的。添加PayAbilitySlice样式布局为了体现MainAbilitySlice和PayAbilitySlice的区别,我们需要对其进行“整容”。我们在layout目录下新建ability_pay.xml,如下图,ability_pay.xml的内容如下:xmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:orientation="vertical">ohos:id="$+id:text_pay"ohos:height="match_parent"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizo??ntal_center"ohos:text="Paymethemoney"ohos:text_size="50"/>ability_pay.xml基本上是从ability_main.xml复制而来的。主要区别是:lidissetfor$+id:text_payltextissetforPaymethemony设置PayAbilitySlice样式布局设置ability_pay.xml后,如何使用这种样式布局?参考如下代码,通过super.setUIContent()指定一个新的样式布局即可:publicclassPayAbilitySliceextendsAbilitySlice{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);//指定UIsuper.setUIContent(ResourceTable.Layout_ability_pay);}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}}如何实现AbilitySlices之间的路由和导航设置在MainAbility中,通过addActionRoute方法添加到PayAbilitySlice的路由.publicclassMainAbilityextendsAbility{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);//指定默认显示的AbilitySlicesuper.setMainRoute(MainAbilitySlice.class.getName());//使用addActionRounte方法添加路由。addActionRoute("action.pay",PayAbilitySlice.class.getName());}}"action.pay"不添加到config.json的actions数组中,配置如下:"abilities":[{"skills":[{"entities":["entity.system.home"],"actions":["action.system.home","action.pay"]}],"orientation":"landscape","name":"com.waylau.hmos.abilitySliceNavigation.MainAbility","icon":"$media:icon","description":"$string:mainability_description","label":"AbilitySliceNavigation","type":"page","launchType"":"standard"}]设置点击事件触发导航在MainAbilitySlice中,为文本设置了点击事件,并触发了到PayAbilitySlice的导航,代码如下:packagecom.waylau.hmos。abilityslicenavigation.slice;importcom.waylau.hmos.abilityslicenavigation.ResourceTable;importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.colors.RgbColor;importohos...指定UIsuper.setUIContent(ResourceTable.Layout_ability_main);//添加点击事件触发导航}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}}同样,在PayAbilitySlice中,为文本设置了一个点击事件,触发导航到MainAbilitySlice。代码如下:importohos.agp.组件。按钮;importohos.agp.components.DirectionalLayout;importohos.agp.components.Text;importohos.agp.components.element.ShapeElement;publicclassPayAbilitySliceextendsAbilitySlice{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);//指定UIsuper.setUIContent(ResourceTable.Layout_ability_pay);//添加点击事件触发导航Texttext=(Text)findComponentById(ResourceTable.Id_text_pay);text.setClickedListener(listener->present(newMainAbilitySlice(),newIntent()));}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}}运行应用程序,点击“HelloWorld”文本,可以切换到“Paymethemoney”,再点击“Paymethemoney”文本,可以切换到“HelloWorld”至此实现了多个AbilitySlices之间的路由和导航。源码见https://github.com/waylau/harmonyos-tutorial?版权归作者及HarmonyOS技术社区所有。如需转载请注明出处,否则将追究法律责任。更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz
