HarmonyOS 鸿蒙Next如何实现类似Android的startActivityForResult效果
HarmonyOS 鸿蒙Next如何实现类似Android的startActivityForResult效果 我在A页面, 点击选择省份, 跳转到B页面, B页面里面省份选择完成后关闭并将选择的省份信息回传到A页面.
可以参考下 UIAbilityContext.startAbilityForResult
如果使用 NavPathStack
的 pushPathByName
的话,可以通过添加 onPop
回调函数来处理页面返回时的操作。当页面出栈时,onPop
回调会被触发,可以在回调中获取返回信息并进行处理。
参考文档:页面跳转
可以参考以下 demo:
// Index.ets
@Entry
@Component
struct NavigationExample {
pageInfo: NavPathStack = new NavPathStack()
build() {
Navigation(this.pageInfo) {
Column() {
Button('StartTest', { stateEffect: true, type: ButtonType.Capsule })
.width('80%')
.height(40)
.margin(20)
.onClick(() => {
this.pageInfo.pushPath({ name: 'pageOne' }); // 将name指定的NavDestination页面信息入栈。
})
}
}.title('NavIndex')
}
}
// PageOne.ets
import { BusinessError } from '@kit.BasicServicesKit';
class TmpClass{
count:number = 10
}
class ParamWithOp {
operation: number = 1
count: number = 10
}
@Builder
export function PageOneBuilder(name: string, param: Object) {
PageOne()
}
@Component
export struct PageOne {
pageInfo: NavPathStack = new NavPathStack();
@State message: string = 'Hello World'
build() {
NavDestination() {
Column() {
Text(this.message)
.width('80%')
.height(50)
.margin(10)
Button('pushPathByName', { stateEffect: true, type: ButtonType.Capsule })
.width('80%')
.height(40)
.margin(10)
.onClick(() => {
let tmp = new TmpClass()
this.pageInfo.pushPathByName('pageTwo', tmp, (popInfo)=>{
this.message = '[pushPathByName]last page is: ' + popInfo.info.name + ', result: ' + JSON.stringify(popInfo.result);
}); // 将name指定的NavDestination页面信息入栈,传递的数据为param,添加接收处理结果的onPop回调。
})
}.width('100%').height('100%')
}.title('pageOne')
.onBackPressed(() => {
this.pageInfo.pop({number: 1}) // 弹出路由栈栈顶元素。
return true
}).onReady((context: NavDestinationContext) => {
this.pageInfo = context.pathStack;
})
}
}
// PageTwo.ets
class resultClass {
constructor(count: number) {
this.count = count;
}
count: number = 10
}
@Builder
export function PageTwoBuilder() {
PageTwo()
}
@Component
export struct PageTwo {
pathStack: NavPathStack = new NavPathStack()
build() {
NavDestination() {
Column() {
Button('pop', { stateEffect: true, type: ButtonType.Capsule })
.width('80%')
.height(40)
.margin(20)
.onClick(() => {
this.pathStack.pop(new resultClass(1)); // 回退到上一个页面,将处理结果传入push的onPop回调中。
})
}.width('100%').height('100%')
}.title('pageTwo')
.onReady((context: NavDestinationContext) => {
this.pathStack = context.pathStack
})
}
}
更多关于HarmonyOS 鸿蒙Next如何实现类似Android的startActivityForResult效果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,实现类似Android的startActivityForResult
效果,可以通过使用Ability
(鸿蒙中的应用组件)间的数据传递机制来完成。
鸿蒙系统提供了Intent
类用于在不同Ability
间传递数据。要实现类似startActivityForResult
的功能,可以使用startAbilityForResult
方法启动目标Ability
,并在目标Ability
完成后通过setResult
方法返回数据。
具体步骤如下:
-
启动目标Ability: 在源
Ability
中,使用startAbilityForResult
方法启动目标Ability
,并传入一个请求码。 -
处理目标Ability返回的数据: 在源
Ability
中重写onAbilityResult
方法,该方法会在目标Ability
通过setResult
方法返回数据时被调用。 -
在目标Ability中返回数据: 在目标
Ability
中,完成操作后,使用setResult
方法携带数据返回。
需要注意的是,鸿蒙系统的Ability
生命周期和Android的Activity
有所不同,因此在实现时要确保对鸿蒙系统的生命周期管理有充分理解。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,