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通过系统返回按钮返回时程序闪退。
最新评论