导航条设计代码(鸿蒙应用开发中FA各Slice间导航的4种类型及代码实现)

Ability是鸿蒙的核心功能之一,它分为FA和PA,其中FA目前只支持Page Ability(也称配置Ability),为方便显示和控制,一个Page Ability根据功能可包含多个Ability Slice,每个Ability Slice负责显示一个页面,该Ability中各Slice间导航可以根据是否带参数、是否有返回值,经相互组合分为4种类型。假设起始Slice类为StartSlice、目的Slice类为TargetSlice。

Slice间导航4种类型

其实现代码如下:

一、无参数无返回值

  • 在StartSlice类中添加如下代码:

Intent it = new Intent(); present(new TargetSlice(),it);

即可实现直接导航。

二、无参数有返回值

  • 在StartSlice类中添加如下代码(333为请求码,可为任意数字,用于识别从哪个Slice中得到返回值):

Intent it = new Intent(); presentForResult(new TargetSlice(),it,333);

  • 在TargetSlice类的回调函数中添加带返回值导航返回代码:

Intent it = new Intent(); //通过it设置返回参数 it.setParam("result","Valid User"); setResult(it); //关闭当前slice terminate();

  • 在StartSlice类中重写onResult()方法,判断是否是当前请求码返回的页面,进而得到返回值,同时要捕捉TargetSlice中不是通过回调函数返回而是通过系统返回键返回从而导致程序闪退的异常:

try{ if(requestCode == 333){ String rst = resultIntent.getStringParam("result"); } }catch(Exception e){//... }

三、有参数无返回值

  • 在StartSlice类中添加如下代码:

Intent it = new Intent(); it.setParam("usrname","MyName"); it.setParam("age",18); present(new TargetSlice(),it);

通过 it 将"username"-"MyName"和"age"-18两个键值对设置的2个参数带到TargetSlice中去

  • 在TargetSlice类中通过intent得到传递的参数:

String usrname = intent.getStringParam("usrname"); int age = intent.getIntParam("age",-1);

四、有参数有返回值(上述二、三两种情况的结合)

  • 在StartSlice类中添加如下代码(666为请求码):

Intent it = new Intent(); it.setParam("usrname","MyName"); it.setParam("age",18); presentForResult(new TargetSlice(),it,666);

  • 在TargetSlice类中通过intent得到传递的参数,在回调函数中添加带返回值导航返回代码:

Intent it = new Intent(); //通过it设置返回参数 it.setParam("result","Valid User"); setResult(it); //关闭当前slice terminate();

  • 在StartSlice类中重写onResult()方法,判断是否是当前请求码返回的页面,进而得到返回值,同时也要捕捉程序闪退的异常:

try{ if(requestCode == 666){ String rst = resultIntent.getStringParam("result"); } }catch(Exception e){//... }

总结如下:

1.通过Intent携带参数;

2.无返回值导航直接通过present()实现;

导航条设计

3.有返回值导航通过presentForResult()实现;

4.设置参数是通过intent.setParam()利用键值对来实现;

5.返回值是通过setResult()导航回来;

6.取得参数、返回值是通过intent.get类型Param(如getStringParam、getIntParam)来实现;

7.取得返回值时要捕捉异常,否则可能会因为TargetSlice通过系统返回按钮返回时程序闪退。

您可以还会对下面的文章感兴趣

最新评论

  1. 山野的霧
    山野的霧
    发布于:2022-04-27 19:17:49 回复TA
    resent(new TargetSlice(),it);通过 it 将"username"-"MyName"和"age"-18两个键值对设置的2个参数带到TargetSlice中去在Target
  1. 帅呆了
    帅呆了
    发布于:2022-04-27 18:47:38 回复TA
    34;age",-1);四、有参数有返回值(上述二、三两种情况的结合)在StartSlice类中添加如下代码(666为请求码):Intent it = new Intent();it.setParam("
  1. 裘影豪行
    裘影豪行
    发布于:2022-04-27 11:32:56 回复TA
    还能这样?
  1. 谈忠勇韦
    谈忠勇韦
    发布于:2022-04-27 11:32:56 回复TA
    如果你能每一天呐喊遍“我用不着为这一点小事而烦恼”,你会发现,你心里有一种不可思议的力量,试试看,很管用的。

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友