Intent 是对象之间传递信息的载体。
例如,当一个 Ability 需要启动另一个 Ability 时,或者一个 AbilitySlice 需要导航到另一个 AbilitySlice 时,可以通过 Intent 指定启动的目标同时携带相关数据。
Intent 的构成元素包括 Operation 与 Parameters:
虽然一个 Page 可以包含多个 AbilitySlice,但是 Page 进入前台时界面默认只展示一个 AbilitySlice。
默认展示的 AbilitySlice 是通过 setMainRoute() 方法来指定的。
当有多个需要展示的 AbilitySlice,可以通过 addActionRoute() 方法为 MainAbilitySlice 以外的 AbilitySlice 配置路由规则。
此时,当其他 Page 实例期望导航到这些 AbilitySlice 时,可以通过 AbilitySlice 之间的跳转,显示出这张页面。
public class MyAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
// set the main route
setMainRoute(MainSlice.class.getName());
// set the action route
addActionRoute("action.pay", PaySlice.class.getName());
addActionRoute("action.scan", ScanSlice.class.getName());
}
}
addActionRoute() 方法中使用的动作命名,需要在应用配置文件 (config.json) 中注册:
{
"module": {
"abilities": [
{
"skills":[
{
"actions":[
"action.pay",
"action.scan"
]
}
]
...
}
]
...
}
...
}
同一个 Page 里的 AbilitySlice1 与 AbilitySlice2 间的跳转(无参,带参,回值)。
①无参数跳转
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
Text text = (Text)findComponentById(ResourceTable.Id_text_helloworld);
text.setClickedListener(component->{
Intent intent1 = new Intent();
present(new MainAbilitySlice1(),intent1);
});
}
②带参数跳转
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
Text text = (Text)findComponentById(ResourceTable.Id_text_helloworld);
text.setClickedListener(component->{
//有参数跳转
Intent intent1 = new Intent();
intent1.setParam("user","钟发发");
present(new MainAbilitySlice1(),intent1);
});
}
public class MainAbilitySlice1 extends AbilitySlice {
Text text;
String oldText;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main1);
text = (Text) findComponentById(ResourceTable.Id_text_helloworld1);
if(intent != null){
String user = intent.getStringParam("user");
oldText = text.getText();
text.append("," + user);
}
}
@Override
protected void onInactive() {
super.onInactive();
}
....
}
③带参数跳转+返回值
public class MainAbilitySlice extends AbilitySlice {
@Override
public void