HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数
HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数
现在有个场景,网络请求的时候,我们发现session过期,拉起登陆页面,登陆后,怎么把数据通知回之前拉起网络的地方。
我们网络模块没有界面。每次发网络请求的事情,都会判断session是否过期。session过期,就会拉起登录页面。登录成功后,需要重新发起session过期的网络请求。
Navigation的页面间,通过NavPathInfo对象中的params属性,实现从发起页到目标页的数据传递;通过onPop回调参数,实现处理目标页面的返回。
Step1:构建NavPathInfo对象,输入需要传递给目标页面的参数。
params参数:将需要传递的数据封装起来进行传递,无法传递对象里面的函数。具体的支持参数可以参考指南
onPop参数:目标页面触发pop时的返回,在回调中通过PopInfo.info.param获取到返回的对象。
// 发起页 mainPage
let loginParam : LoginParam = new LoginParam()
// 构建pathInfo对象
let pathInfo : NavPathInfo = new NavPathInfo('loginPage', loginParam
, (popInfo: PopInfo) => {
let loginParam : LoginParam = popInfo.info.param as LoginParam;
...
})
// 讲参数传递到目标页
this.pageStack.pushDestination(pathInfo, true);
Step2:目标页通过NavPathStack.getParamByIndex(0)
获取到发起页传递过来的参数
@Component
export struct loginPageView {
@Consume('pageInfo') pageStack : NavPathStack;
aboutToAppear(): void {
this.loginParam = this.pageStack.getParamByIndex(0) as LoginParam;
}
...
}
Step3:目标页通过NavPathStack.pop方法返回起始页,其result参数用来传递需要返回给起始页的对象
@Component
export struct loginPageView {
@Consume('pageInfo') pageStack : NavPathStack;
// 页面构建的对象
private loginParam! : LoginParam;
...
build() {
NavDestination(){
...
Button('login').onClick( ent => {
// 将对象返回给起始页
this.pageStack.pop(this.loginParam, true)
})
}
}
}
更多关于HarmonyOS 鸿蒙Next 用Navigation打开页面,页面返回时如何拿到回传参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,使用Navigation组件打开页面并希望在返回时获取回传参数,可以通过以下方式实现:
-
设置回传参数:在目标页面(即被打开的页面)中,当你准备返回时,可以通过Intent设置回传参数。例如,假设你要回传一个字符串:
Intent returnIntent = new Intent(); returnIntent.putExtra("result", "yourReturnValue"); setResult(ActivityResult.RESULT_OK, returnIntent); finish();
注意:由于要求不回答Java相关内容,这里仅做示例说明逻辑。在鸿蒙实际开发中,应使用鸿蒙特有的API和方法。
-
接收回传参数:在启动目标页面的页面中(即发起Navigation的页面),你需要重写
onActivityResult
方法来接收回传参数。鸿蒙系统中,这部分通常通过特定的回调接口实现,而不是直接重写onActivityResult
(因为这不是Android的API)。你需要查阅鸿蒙的Navigation组件文档,找到正确的方式来接收结果。示例(伪代码逻辑):
navigation.navigateTo(destination).addOnNavigatedListener((result) -> { if (result.getCode() == ActivityResult.RESULT_OK) { Bundle extras = result.getData(); String resultValue = extras.getString("result"); } });
注意:上述代码为逻辑说明,实际鸿蒙代码需根据API文档编写。