更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com前言这里是HarmonyOS文档学习|页面能力|思维导图就是文档部分的思维导图,页面跳转也是里面的知识。本文只是一个使用手册和代码的补充部分。不建议只根据本文练习。正确的做法是下载附件中的源码,对照源码和文章的步骤,练习重现页面跳转,即AbilitySlices之间的导航。这部分有两种,一种是在同一个Page中跳转,一种是在不同的Page中跳转1.在layout文件夹下写xml布局文件ability_main.xml为主页面,其他三种是要跳转的页面,可以随意定义内容2.在slice中声明创建一个Slice文件并声明调用layout布局文件3.在mainSlice中,编写业务代码实现跳转(不同方法的区别主要在第三步)1.2.核心代码部分1.2.1。无参数跳转MainAbilitySlice.java//第一个按钮:实现基本跳转Turn//通过xml布局文件中的组件ID获取组件Buttonbtn_1=(Button)findComponentById(ResourceTable.Id_btn_1);//设置按钮点击监听事件,点击时执行如下操作btn_1.setClickedListener(component->{//lambdaExpressionIntentbtn_1_intent=newIntent();//Intent:Intent,是对象间传递信息的载体//通过present进行跳转操作/***参数说明*newFirstAbilitySlice():表示要跳转到的切片*btn_1_intent:将信息载体作为参数传递给对应的切片*/present(newFirstAbilitySlice(),btn_1_intent);});调用present()后,会直接跳转到1.2.2。跳转大部分内容和第一个带参数的实现差不多,所以就不写注释MainAbilitySlice.java//第二个按钮:实现带参数的跳转;可以通过边跳边传值来改变内容。Buttonbtn_2=(Button)findComponentById(ResourceTable.Id_btn_2);btn_2.setClickedListener(component->{Intentbtn_2_intent=newIntent();btn_2_intent.setParam("data","你好,鸿蒙");//设置参数,形式为K:V结构,存储在意图present(newSecondAbilitySlice(),btn_2_intent);});secondAbilitySlice.java@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_2);Texttext=(Text)findComponentById(ResourceTable.Id_ability_text_2);//获取text组件//getStringParam(),通过key从inent中获取value,因为是key-value对的形式;返回结果为“鸿蒙,你好”text.setText(intent.getStringParam("data"));//修改文本组件的内容会覆盖原来的内容}主页面设置参数存入intent后跳转,跳转到目标页面Slice后,读取inent中的参数,从而将原来的内容由“二次页面跳转实现”修改为“鸿蒙,你好”1.2.3。带返回值跳转(以下代码一步步实现)MainAbilitySlice.java//第三个按钮:实现带返回值跳转;可以通过验证返回值,在onResult中验证后实现其他行为);//这里是用presentForResult()跳转,最后一个参数是请求码,用来验证presentForResult(newThirdAbilitySlice(),btn_3_intent,666);});ThridAbilitySlice.java@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_3);//通过组件id获取组件Texttext=(Text)findComponentById(ResourceTable.Id_ability_text_3);text.setClickedListener(component->{Intentintent1=newIntent();intent1.setParam("pwd","51cto");//设置参数setResult(intent1);//设置返回结果terminate();//点击事件结束后销毁slice});}MainAbilitySlice.java@OverrideprotectedvoidonResult(intrequestCode,IntentresultIntent){super.onResult(requestCode,resultIntent);//如果请求码验证通过,则执行以下操作if(requestCode==666){//获取pwd的值Stringpwd=resultIntent.getStringParam("pwd");//在原文后面加上pwd的值text_main.append("password:"+pwd);}}调用过程如下点击获取密码后,terminate()方法将被调用以销毁页面回到主页面,同时调用onResult()方法进行文本拼接2.不同页面跳转的两种实现2.1基本实验步骤1.新建一个Ability,DES会自动在layout和slice2.在layout文件夹中写入xml布局文件3.在slice中创建一个Slice文件声明并调用layout布局文件4.在mainSlice中,编写业务代码实现跳转2.2.核心代码部分2.2.1。通过newIntent.OperationBuilder()方式MainAbilitySlice.java//推荐使用该方式实现!使用OperationBuilder()方法实现Buttonbtn_4=(Button)findComponentById(ResourceTable.Id_btn_4);btn_4.setClickedListener(component->{Intentbtn_4_intent=newIntent();Operationoperation=newIntent.OperationBuilder().withDeviceId("")//DeviceId,本地跳转可以为空,跨设备跳转需要传入一个值。withBundleName("com.anzia.pagejump")//包名.withAbilityName(".SecondAbility")//能力页面名,之前的路径即可本地默认.build();//构建代码btn_4_intent.setOperation(operation);//将操作存入intentstartAbility(btn_4_intent);//实现能力跳转});结果2.2。2.通过setAction()方法Step1:在config中声明SecondAbilityactionsStep2:在SecondAbility中添加Action路由publicclassSecondAbilityextendsAbility{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(SecondPageSlice.class.getName());//第一个参数为:config.json中声明的actions;第二个参数是:目标Slice要跳转的路径名super.addActionRoute("abilityslice2",SecondPageSlice.class.getName());}}第三步:在MainAbilitySlice.java中实现不同的页面跳转//这个不是推荐,比较麻烦//先在config.json中添加相应的action//在Ability文件中添加addActionRoute()路由//在Slice文件中,组件Buttonbtn_5的监听事件设置跳转方式=(Button)findComponentById(ResourceTable.Id_btn_5);btn_5.setClickedListener(component->{Intentbtn_5_intent=newIntent();btn_5_intent.setAction("abilityslice2");startAbility(btn_5_intent);});结果3.总结3.1。同页跳转默认://直接调用带参数的present()方法://主页面intent.setParam()present()//目标页面intent.getXXXParam()等待返回值://主页面presentForResult()//TargetpagesetResult()//主页面实现onResult()方法3.2.不同页面跳转OperationBuilder()方法//主页面Operationoperation=newIntent.opationBuilder().withDeviceId(deviceid).withBundleName(packagename).withAbilityName(FAname).build();intent.setOparation(operation);startAbility(意图);setAction()方法//在配置中。在json中声明action//在目标Ability中调用addActionRoute()方法添加路由super.addActionRoute();//主页面intent.setAction(actionname);startAbility(intent);最重要的是从不同的页面跳转,从不同的页面跳转。推荐使用OperationBuilder()方法,因为跨设备调用需要使用该方法。更多信息请访问:与华为鸿蒙技术社区共建https://harmonyos.51cto.com
