HarmonyOS 鸿蒙Next 接入HNRouter后,onBackPressed失效,要怎么使用

HarmonyOS 鸿蒙Next 接入HNRouter后,onBackPressed失效,要怎么使用 接入HNRouter后,onBackPressed失效,要怎么使用

2 回复

HMRouter底层其实还是由Navigation实现,需要触发onBackPressed需要实现@HMLifecycle自定义生命周期,参考文档:

https://gitee.com/hadss/hmrouter/blob/master/HMRouterLibrary/README.md#生命周期标签-hmlifecycle

参考demo:

import { webview } from "@kit.ArkWeb";
import { common } from "@kit.AbilityKit";
import { HMLifecycle, HMLifecycleContext, HMRouter, HMRouterMgr, IHMLifecycle } from '@hadss/hmrouter';

let context = this as common.UIAbilityContext
let _controller: webview.WebviewController = new webview.WebviewController();

[@HMLifecycle](/user/HMLifecycle)({ lifecycleName: 'exampleLifecycle' })
export class ExampleLifecycle implements IHMLifecycle {
  lastTime: number = 0;

  onBackPressed(ctx: HMLifecycleContext) {
    if (_controller.accessStep(-1)) {
      _controller.backward()
      return true
    } else {
      let time = new Date().getTime();
      if (time - this.lastTime > 1000) {
        this.lastTime = time;
        ctx.uiContext.getPromptAction().showToast({
          message: '再次返回退出应用',
          duration: 1000,
        });
        return true;
      } else {
        context.terminateSelf()
        return true
      }
    }
  }
}

@Entry()
@HMRouter({ pageUrl: 'testPage', lifecycle: 'exampleLifecycle' })
@Component
export struct testPage {
  build() {
    Stack({ alignContent: Alignment.Top }) {
      Column() {
        this.webView();
      }
      .width('100%')
      .height('100%')
    }
    .width('100%')
    .height('100%')
  }

  @Builder
  private webView() {
    Web({
      src: 'https://m.baidu.com',
      controller: _controller,
    })
      .width('100%')
      .height('100%')
      .zoomAccess(false)// 不允许缩放
      .domStorageAccess(true)
      .cacheMode(CacheMode.Online)
  }
}

更多关于HarmonyOS 鸿蒙Next 接入HNRouter后,onBackPressed失效,要怎么使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,接入HNRouter后,如果onBackPressed方法失效,通常是由于路由管理可能与系统的默认返回行为产生了冲突。为了解决这个问题,你可以尝试以下几种方式:

  1. 检查路由配置:确保HNRouter的配置正确,没有错误地拦截或覆盖了默认的返回行为。检查是否有路由规则错误地处理了返回事件。

  2. 重写返回逻辑:在Activity或Ability中手动重写返回逻辑。可以通过重写dispatchKeyEvent方法或者监听返回键事件,在事件处理中根据当前页面状态决定是否执行默认的返回操作或执行其他逻辑。

  3. 使用路由回调:在HNRouter的配置中,查看是否有提供回调接口用于处理返回事件。如果有,可以实现这些接口并自定义返回行为。

  4. 检查生命周期方法:确保在Activity或Ability的生命周期方法中,没有代码错误地阻止了返回操作。

  5. 日志调试:使用日志输出关键路径和变量状态,帮助定位问题所在。

如果上述方法仍然无法解决问题,可能是由于鸿蒙系统的特定版本或配置导致的兼容性问题。此时,建议直接联系鸿蒙系统的开发者支持或查阅官方文档获取更具体的指导。如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部