页面间跳转分围Page(Ability)内跳转,和Page(Ability)外跳转两种场景,两种场景跳转都需要借助Intent,另外传递参数也可以借助Intent来携带参数(这里和Android类似)
一 Page(Ability)页面内跳转
- 页面第一个组件 MainAbilitySlice,第二个组件SecondAbilitySlice
- 第一个组都有一个Text(显示页面内容)和Button(跳转按钮)
- 在MainAbilitySlice 点击Next按钮,跳转到SecondAbilitySlice
- SecondAbilitySlice点击Return按钮,返回MainAbilitySlice
a方式:在同一个Page(Ability)内跳转时,当发起跳转的AbilitySlice和跳转目标的AbilitySlice处于同一个Page时候,可通过present()方法实现跳转:
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//1不同 Slice 间跳转,同一个 Ability 中,优点是方便,高效,缺点是业务逻辑复杂度受限
present( new SecondAbilitySlice(), new Intent());
}
});
如果在跳转返回时需要获取其结果,则可以使用parsentForResult()实现跳转:
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//跳转返回时需要获取其结果
presentForResult(new SecondAbilitySlice(),new Intent(),100);
}
});
@Override
protected void onResult(int requestCode, Intent resultIntent) {
if(requestCode==100){//跳转返回
}
}
销毁当前页面组件
//点击返回 类似于Android中的finish()
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
terminate();
}
});
二 Page(Ability)间的跳转
项目结构由于不同Page中的AbilitySlice相互不可见,因此无法通过parsent()或parsentForResult()方法之间导航到其他Page的AbilitySlice,可以使用startAbility()或startAbilityResult()方法,获得返回结果的回调onAbilityResult(),
-
第一步:配置action
1:首先需要在配置文件中声明对外提供的能力,config.json中
2:跳转方法
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
// 3借助于 Operation,可实现跨应用页面跳转
Intent secondIntent=new Intent();
secondIntent.setParam("name","携带的参数");
// 指定待启动FA的bundleName和abilityName
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("cn.gogpay.dcb_harmony")
.withAbilityName("cn.gogpay.dcb_harmony.SecondAbility")
.build();
secondIntent.setOperation(operation);
// 通过AbilitySlice的startAbility接口实现启动另一个页面
startAbility(secondIntent);
}
});
//接收参数
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_second_main);
log("onstart");
button = (Button) findComponentById(ResourceTable.Id_back_btn);
second_titlel = (Text) findComponentById(ResourceTable.Id_second_title);
if(intent != null){
String name = intent.getStringParam( "name");
second_titlel.setText(name);
}
}