HarmonyOS鸿蒙Next中侧滑返回时如何不注册onBackPressed也能触发push时的onPop?

HarmonyOS鸿蒙Next中侧滑返回时如何不注册onBackPressed也能触发push时的onPop?

A 页面 push B页面,需要 B 页面 pop 的时候调用 A push 时的 onpop,B页面如果手势返回,就调用不到 onpop,但是不能注册 B 的 onBackPressed 事件,这样要怎么解决?

3 回复

在页面 A push 时传入 onPop,当通过侧滑返回时,如果需要触发 onPop,需要注册 onBackPressed 事件,返回 false 并手动 pop 传参,示例如下:

@Component
struct Page02 {
  pathStack: NavPathStack | undefined = undefined;

  build() {
    NavDestination() {
......
    }.title('页面1')
    .onBackPressed(() => {
      this.pathStack?.pop(3000);
      return true;
    })
  }
}

而不需要注册 onBackPressed 事件,那应该是不需要传参,只需在页面 A 的 onShown 里实现业务即可。

更多关于HarmonyOS鸿蒙Next中侧滑返回时如何不注册onBackPressed也能触发push时的onPop?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,侧滑返回时默认会触发onBackPressed。若希望在未注册onBackPressed的情况下触发push时的onPop,可以通过监听路由变化来实现。使用RouteraddObserver方法,监听RouteChangeEvent,在onRoutePop回调中处理onPop逻辑。这样即使不注册onBackPressed,也能在侧滑返回时触发onPop

在HarmonyOS Next中,可以通过以下方式实现侧滑返回时触发push时的onPop回调,而无需在B页面注册onBackPressed:

  1. 使用PageAbility的路由回调机制: 在A页面push B页面时,可以这样设置:
router.pushUrl({
  url: 'pages/B',
  params: { /* 参数 */ }
}, router.RouterMode.Standard, (result) => {
  // 这里就是onPop回调
  console.log('B页面已返回');
});
  1. 对于系统手势返回,HarmonyOS Next会自动触发这个回调函数,不需要在B页面额外处理onBackPressed。

  2. 如果需要在B页面主动返回时也触发这个回调,可以在B页面使用标准的router.back()方法返回:

router.back()

这种方法利用了HarmonyOS Next的路由机制,系统手势返回和编程式返回都会触发push时设置的回调函数,无需在B页面做特殊处理。

回到顶部