鸿蒙next Navigation导航学习

  目前鸿蒙官网已经已经在逐步放弃@ohos.router下面放一张官网的截图:

这里做一个对比:

业务场景NavigationRouter
一多能力支持,Auto模式自适应单栏跟双栏显示不支持
跳转指定页面pushPath & pushDestinationpushUrl & pushNameRoute
跳转HSP中页面支持支持
跳转HAR中页面支持支持
跳转传参支持支持
获取指定页面参数支持不支持
传参类型传参为对象形式传参为对象形式,对象中暂不支持方法变量
跳转结果回调支持支持
跳转单例页面支持支持
页面返回支持支持
页面返回传参支持支持
返回指定路由支持支持
页面返回弹窗支持,通过路由拦截实现showAlertBeforeBackPage
路由替换replacePath & replacePathByNamereplaceUrl & replaceNameRoute
路由栈清理clearclear
清理指定路由removeByIndexes & removeByName不支持
转场动画支持支持
自定义转场动画支持支持,动画类型受限
屏蔽转场动画支持全局和单次支持 设置pageTransition方法duration为0
geometryTransition共享元素动画支持(NavDestination之间共享)不支持
页面生命周期监听UIObserver.on('navDestinationUpdate')UIObserver.on('routerPageUpdate')
获取页面栈对象支持不支持
路由拦截支持通过setInercption做路由拦截不支持
路由栈信息查询支持getState() & getLength()
路由栈move操作moveToTop & moveIndexToTop不支持
沉浸式页面支持不支持,需通过window配置
设置页面标题栏(titlebar)和工具栏(toolbar)支持不支持
模态嵌套路由支持不支持

作为替代者,我个人认为Navigation 是面向未来的即跨端设备最好的路由方式,其中它解决了目前移动端最头疼的折叠屏的适配方式,当然你也会说解决移动端折叠屏还有其他的方式,但是目前就我所知华为这是最好的方式,下面我们简单的介绍一下Navigation的使用方式,从整个逻辑上来看和Jetpack 的路由也很像。下面详细介绍一下使用的方式:

第一步:首先是在主页面创建对应的容器:

这里红框标红的就是核心代码。有了对应的容器后,即可添加对应的跳转代码。这里我们使用pushPathByName()方法,这里要进行一个区别,就是pushPath 和 pushPathByName方法

对于我们初学者我们只需要关注对应的跳转方式就可以了,这里我的跳转方式如下:

第二步:

这样我们就完成了,需要调整的页面的相关工作,下面我们来看我们需要去的界面的相关配置:

第三步:

我们首页要声明入口的方法这里特别注意,我们的入口方法要和我们的json文件的名称保持一致:

第四步:

我们创建一个router_pages.json 文件,然后完成如下的操作方式:

这样就可以引入我们需要的json文件了,最后我们去json文件里操作。

这里一定要注意:buildFunction这个参数,后面的value一定要和去哪里的那个界面保持一致,不然很容易出现跳转失败的问题。

同样后续的跳转也是类似这样操作。好了一个简单的跳转方式就简单的介绍完了,后面会继续补充,我们对 Navigation的详细理解,包括和主页Tab 之间的处理,还有对代码的封装,如果避免json文件写错的情况导致问题排查的难度,还有如何进行自定义修改官方的UI样式。其他的像跳转动画之类的,我这里建议参考官方文档,官方文档介绍的相当详细。

组件导航 (Navigation)(推荐)-设置组件导航和页面路由-UI开发 (ArkTS声明式开发范式)-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

### HarmonyOS 下一个导航功能或实现方式 HarmonyOS导航功能与 Android Jetpack 的 Navigation 组件类似,但其设计和实现方式更加贴合分布式设备的特性。以下是关于 HarmonyOS 中下一个导航功能或实现方式的详细说明: #### 1. **依赖添加** 在 HarmonyOS 中,导航功能的实现需要引入相关依赖。虽然 HarmonyOS 并未直接使用 Android 的 `navigation` 组件,但其提供了类似的模块化导航支持。以下是一个典型的依赖添加示例[^4]: ```gradle dependencies { implementation 'com.huawei.harmonyos:navigation-core:2.0.0' implementation 'com.huawei.harmonyos:navigation-ui:2.0.0' implementation 'com.huawei.harmonyos:navigation-dynamic-features:2.0.0' } ``` 这些依赖分别用于核心导航功能、用户界面交互以及动态功能模块的支持。 #### 2. **导航组件的核心结构** HarmonyOS导航组件同样由三个关键部分组成,类似于 Android Jetpack 的 Navigation 组件[^5]: - **Navigation Graph**:定义了应用内的所有页面及其之间的导航路径。导航图通常以 XML 文件的形式存储在 `res/navigation` 目录下。 - **NavHost**:作为导航目标的容器,负责显示当前页面内容。HarmonyOS 提供了 `AbilitySlice` 作为基础单元来实现 NavHost。 - **NavController**:管理导航逻辑的对象,控制页面之间的切换和参数传递。 以下是一个简单的导航图示例[^6]: ```xml <navigation xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_graph" android:startDestination="@id/home_slice"> <fragment android:id="@+id/home_slice" android:name="com.example.HomeAbilitySlice" /> <fragment android:id="@+id/detail_slice" android:name="com.example.DetailAbilitySlice" /> </navigation> ``` #### 3. **动态功能模块支持** HarmonyOS 支持动态功能模块(Dynamic Feature Module),允许开发者按需加载特定的功能模块。例如,当用户进入某个特定页面时,系统会自动下载并加载相关的模块[^7]。这种方式可以显著减少应用初始安装包的大小,同时提高用户体验。 #### 4. **代码示例** 以下是一个简单的导航实现示例,展示了如何从一个页面导航到另一个页面[^8]: ```java // 获取 NavController 实例 NavController navController = findNavController(this); // 导航到目标页面 navController.navigate(R.id.detail_slice); ``` #### 5. **跟踪失败的处理** 在 HarmonyOS导航实现中,也需要考虑类似 VSLAM 系统中的跟踪失败问题[^9]。例如,当用户在网络条件较差的情况下尝试加载动态模块时,可能会导致导航失败。为了解决这一问题,HarmonyOS 提供了内置的错误处理机制,确保在导航失败时能够优雅地回退到默认页面。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值