頁面間跳轉(zhuǎn)分圍Page(Ability)內(nèi)跳轉(zhuǎn),和Page(Ability)外跳轉(zhuǎn)兩種場景,兩種場景跳轉(zhuǎn)都需要借助Intent,另外傳遞參數(shù)也可以借助Intent來攜帶參數(shù)(這里和Android類似)
一 Page(Ability)頁面內(nèi)跳轉(zhuǎn)
- 頁面第一個組件 MainAbilitySlice希痴,第二個組件SecondAbilitySlice
- 第一個組都有一個Text(顯示頁面內(nèi)容)和Button(跳轉(zhuǎn)按鈕)
- 在MainAbilitySlice 點擊Next按鈕州胳,跳轉(zhuǎn)到SecondAbilitySlice
- SecondAbilitySlice點擊Return按鈕,返回MainAbilitySlice
a方式:在同一個Page(Ability)內(nèi)跳轉(zhuǎn)時,當發(fā)起跳轉(zhuǎn)的AbilitySlice和跳轉(zhuǎn)目標的AbilitySlice處于同一個Page時候宰缤,可通過present()方法實現(xiàn)跳轉(zhuǎn):
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//1不同 Slice 間跳轉(zhuǎn)猖凛,同一個 Ability 中毒坛,優(yōu)點是方便蚪缀,高效,缺點是業(yè)務(wù)邏輯復(fù)雜度受限
present( new SecondAbilitySlice(), new Intent());
}
});
如果在跳轉(zhuǎn)返回時需要獲取其結(jié)果贺辰,則可以使用parsentForResult()實現(xiàn)跳轉(zhuǎn):
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//跳轉(zhuǎn)返回時需要獲取其結(jié)果
presentForResult(new SecondAbilitySlice(),new Intent(),100);
}
});
@Override
protected void onResult(int requestCode, Intent resultIntent) {
if(requestCode==100){//跳轉(zhuǎn)返回
}
}
銷毀當前頁面組件
//點擊返回 類似于Android中的finish()
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
terminate();
}
});
二 Page(Ability)間的跳轉(zhuǎn)
項目結(jié)構(gòu)由于不同Page中的AbilitySlice相互不可見户盯,因此無法通過parsent()或parsentForResult()方法之間導航到其他Page的AbilitySlice,可以使用startAbility()或startAbilityResult()方法饲化,獲得返回結(jié)果的回調(diào)onAbilityResult(),
-
第一步:配置action
1:首先需要在配置文件中聲明對外提供的能力莽鸭,config.json中
2:跳轉(zhuǎn)方法
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
// 3借助于 Operation,可實現(xiàn)跨應(yīng)用頁面跳轉(zhuǎn)
Intent secondIntent=new Intent();
secondIntent.setParam("name","攜帶的參數(shù)");
// 指定待啟動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接口實現(xiàn)啟動另一個頁面
startAbility(secondIntent);
}
});
//接收參數(shù)
@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);
}
}