在多模块应用中使用navigation不知不觉都是这么用

HarmonyOS Next开发学习手册——组件导航 (Navigation) (推荐) Navigation通过 customNavContentTransition 事件提供自定义转场动画的能力,通过如下三步可以定义一个自定义的转场动画。构建一个自定义转场动画工具类CustomNavigationUtils,通过一个Map管理各个页面自定义动画对象CustomTransition,页面在创建的时候将自己的自定义转场动画对象注册进去,销毁的时候解注册; 阅读详情

https://www.youtube.com/watch?v=lv1raAvwcgI&t=318s

省流总结:

假设我们有主模块 app, 功能模块 featureA, featureB,

featureA中有 screen1, screen2

featureB中有 screen3, screen4

核心common模块定义了Route1->screen1,Route2->screen2,Route3->screen3.....

如果在screen3 中要跳转到A中的screen1

有时候代码会是这样

@Composable
fun Screen3(
    navController: NavController,
    modifier: Modifier = Modifier
) {
    Box(
        modifier = Modifier
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        Button(
                onClick = {navController.navigate(Route.Screen1)}    
        ) {
            Text("Go to Screen 1")
        }
    }
}

我们把导航逻辑写到模块中带来的问题是,

如果我现在单独使用 featureB,但是featureB中因为导航的这个逻辑,又要不得不去关联featureA。

所以,需要把导航的逻辑到需要通过lambda来提升到外部去

@Composable
fun ScreenA(
    onButtonClick: () -> Unit,
    modifier: Modifier = Modifier
) {
    Box(
        modifier = Modifier
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        Button(
            onClick = onButtonClick //抛出导航逻辑
        ) {
            Text("Go to Screen 1")
        }
    }
}

所有的逻辑写在应用nav模块中

 NavigationMultiModulePrepTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    val navController = rememberNavController()
                    NavHost(
                        navController = navController,
                        startDestination = Route.ScreenA
                    ) {
                        composable<Route.Screen1> {
                            Screen1(
                                onButtonClick = {
                                    navController.navigate(Route.Screen3)
                                }
                            )
                        }
                        composable<Route.Screen2> {
                            Screen2(
                                onButtonClick = {
                                    navController.navigate(Route.Screen3)
                                }
                            )
                        }
                        composable<Route.Screen3> {
                            Screen3(
                                onButtonClick = {
                                    navController.navigate(Route.Screen1) {
                                        popUpTo<Route.Screen3> {
                                            inclusive = true
                                        }
                                    }
                                }
                            )
                        }
                    }
                }
            }

所以,我们不该在内部的功能部分看到navigate的导航逻辑

再进一步的话,可以把点击事件,转换成 事件 发送出去,再总的导航模块来处理具体的 导航事件

参考,更早的导航说明

关于compose中的navigation-优快云博客

鸿蒙:Navigation的基本使用 注:本章只是简单介绍一下其用法,详情请看官方文档:Navigation:文档中心Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。NavRouter :导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。必须包含两个子组件,其中第二个子组件必须为NavDestination。Nav 阅读详情

相关推荐

Android Navigation的简单使用方法

前言 上一篇文章记录了底部导航栏BottomNavigationBar的简单使用,这篇文章将会将BottomNavigationBar+Navigation结合使用,点击导航栏不同按钮显示不同的页面,这个功能实现也可以用ViewPager实现。想要使用navigation,需要Androidstudio的版本至少在3.2以上。如Androidstudio版本过低,需更新完版本再使用。 使用前依然需...

Yuki-r的博客 4403

多module(模块)使用Navigation功能

Navigation相信大家都熟悉,网上也有很多教程,但是很少有多Module切换的时候,要怎么使用的,用百度搜索了各种都没找到,后来用Google,一会就搜到了方法 思路是这样的:通过包名,导航文件,找到导航id,而不用module之间相互依赖 interface NavigationGraphRoute { val navigation: String get() = "navigation" var navGraph: NavGraph /**

memoryjs的专栏 2027

android-multi-module-navigation:带有多模块项目的新导航组件的展示应用程序

android-multi-module-navigation 带有多模块项目的新导航组件的展示应用程序 查看有关Medium的文章:

鸿蒙Navigation导航 , 模块内和跨模块路由跳转,动态路由

鸿蒙Navigation导航 , 模块内和跨模块路由跳转,动态路由

m0_59217213的博客 2463

android-multi-modules-navigation-demo:关于多模块项目导航的Android演示

android-multi-modules-navigation-demo 关于在多模块项目上导航的Android演示。 有关更多详细信息,请参见。

Fragmentation-为"单Activity + 多Fragment","多模块Activity 多Fragment"架构而生,简化开发,轻松解决动画、嵌套、事务相关等问题。.zip

A powerful library that manage Fragment for Android!为"单Activity + 多Fragment","多模块Activity 多Fragment"架构而生,简化开发,轻松解决动画、嵌套、事务相关等问题。为了更好的使用和了解该库,推荐阅读下面的文章:Fragment全解析系列(一):那些年踩过的坑Fragment全解析系列(二):正确的使用姿势Demo演示:均为单Activity 多Fragment,第一个为简单流式demo,第二个为仿微信交互的demo(全页面支持滑动退出),第三个为仿知乎交互的复杂嵌套demo下载APK   特性1、可以快速开发出各种嵌套设计的Fragment App2、悬浮球/摇一摇实时查看Fragment的栈视图Dialog,降低开发难度3、增加启动模式、startForResult等类似Activity方法4、类似Android事件分发机制的Fragment回退方法:onBackPressedSupport(),轻松为每个Fragment实现Back按键事件5、提供onSupportVisible()等生命周期方法,简化嵌套Fragment的开发过程; 提供统一的onLazyInitView()懒加载方法6、提供 Fragment转场动画 系列解决方案,动态更换动画7、提供Activity作用域的EventBus辅助类,Fragment通信更简单、独立(需要使用EventBusActivityScope库)8、支持SwipeBack滑动边缘退出(需要使用Fragmentation_SwipeBack库)      如何使用1. 项目下app的build.gradle中依赖:// appcompat-v7包是必须的,v1.1.9兼容v4-27.0.0 compile 'me.yokeyword:fragmentation:1.1.9' // 如果不想继承SupportActivity/Fragment,自己定制Support,可仅依赖: // compile 'me.yokeyword:fragmentation-core:1.1.9' // 如果想使用SwipeBack 滑动边缘退出Fragment/Activity功能,完整的添加规则如下: compile 'me.yokeyword:fragmentation:1.1.9' // swipeback基于fragmentation, 如果是自定制SupportActivity/Fragment,则参照SwipeBackActivity/Fragment实现即可 compile 'me.yokeyword:fragmentation-swipeback:1.1.9' // Activity作用域的EventBus,更安全,可有效避免after onSavenInstanceState()异常 compile 'me.yokeyword:eventbus-activity-scope:1.1.0' // Your EventBus's version compile 'org.greenrobot:eventbus:{version}'2. Activity继承SupportActivity:// v1.0.0开始,不强制继承SupportActivity,可使用接口+委托形式来实现自己的SupportActivity public class MainActivity extends SupportActivity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(...);         // 建议在Application里初始化         Fragmentation.builder()              // 显示悬浮球 ; 其他Mode:SHAKE: 摇一摇唤出   NONE:隐藏              .stackViewMode(Fragmentation.BUBBLE)              .debug(BuildConfig.DEBUG)              ... // 更多查看wiki或demo              .install();         if (findFragment(HomeFragment.class) == null)

组件导航 (Navigation)(推荐)

组件导航(Navigation)主要用于实现页面间以及组件内部的页面跳转,支持在不同组件间传递跳转参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。本文将从组件导航(Navigation)的显示模式、路由操作、子页面管理、跨包跳转以及跳转动效等几个方面进行详细介绍。

2302_77228054的博客 1425

Cadence Allegro实战:如何精准导入结构DXF文件避免安装偏差(附图层配置技巧)

本文详细讲解了在Cadence Allegro中精准导入结构DXF文件以避免安装偏差的实战技巧。核心在于导入前的单位校准、创建专用图层结构,以及基于坐标基准点的精确对齐方法。文章还分享了将DXF图形转化为正式板框和禁布区、高效管理图层以及向结构工程师导出DXF的完整流程,帮助PCB工程师确保设计与机械结构完美契合。

1a2s3d4f5g的博客 507

Android JetPack底部导航Navigation 组件的介绍与使用

在以前的应用中,针对多导航模块的使用,常见的有tabhost或者FragmentTabHost,但是这些在使用的过程中,非常臃肿,包括加载和管理也不如人意。在AndroidX中,官方引入Navigation模块,通过布局绑定fragment来完成

1670

嵌入式开发:用状态机实现STM32按键消抖,告别阻塞延时

在嵌入式系统开发中,处理异步事件和实时响应是核心挑战。状态机作为一种强大的编程模型,通过定义有限的状态、事件和状态转换规则,将复杂的、非线性的控制逻辑转化为清晰、确定且易于维护的代码结构。其技术价值在于实现逻辑的模块化、异步化和非阻塞化,能显著提升代码的可读性、可扩展性和系统实时性。这一思想广泛应用于协议解析、用户界面交互、传感器数据处理等场景。本文以嵌入式开发中基础的按键处理为例,针对传统“延时消抖”方法会阻塞主循环、影响实时性的痛点,深入讲解如何运用状态机思维重构按键消抖逻辑。通过分析状态机的核心三要素

weixin_33377602的博客 341

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

React Native Navigation 终极指南:如何构建专业的商业智能应用导航系统

React Native Navigation 是一个完整的原生导航解决方案,专为 React Native 应用设计。它提供了高性能、可定制的导航组件,帮助开发者构建流畅的用户体验,特别适合商业智能应用这类对界面交互和数据展示有高要求的场景。无论是底部标签导航、侧边菜单还是复杂的栈式导航,React Native Navigation 都能轻松应对,让你的应用既美观又实用。 ## 为什么选择

gitblog_00782的博客 324

从零配置华为S5720交换机VLAN:Web界面与命令行双模式详解(附拓扑图)

本文详细解析华为S5720交换机VLAN配置的全过程,涵盖Web界面与命令行(CLI)双模式操作指南。从基础环境准备到多交换机环境配置同步,特别针对S5720-52X系列交换机的VLANif接口、端口分配策略及交换机堆叠技术进行深入讲解,并附实用拓扑图与配置示例,助力企业网络管理员高效完成VLAN部署。

happy2的博客 1372

【Jetpack】Navigation 导航组件 ① ( Navigation 引入 | Navigation 特点 | Navigation 重要组件 | Navigation 使用流程 )

一、Navigation 引入 二、Navigation 特点 三、Navigation 重要组件 四、Navigation 使用流程 1、创建 Fragment 2、创建 Navigation Graph 组件 3、处理 Navigation Graph 组件报错信息 " failed to add navigation dependency " 4、编辑 Navigation Graph 组件 - 创建 action 跳转 5、创建 NavHostFragment 组件 6、在 Activity 中获取

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 9205

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6043

stm32f407VET6 系统学习 day01 GPIO 配置

stm32f407VET6 系统学习 day01 GPIO 配置 LED 蜂鸣器 按键的不讲了,之前讲过了

she666666的博客 8907

gemma-4-E2B-it-GGUF提示词调优指南:5个技巧让本地模型回答质量大幅提升

gemma-4-E2B-it-GGUF 是 LM Studio 社区模型计划提供的一套 GGUF 量化模型文件,包含 [Q4_K_M](https://link.gitcode.com/i/3f86e9ff48051707f83f02f7305385bf)、[Q6_K](https://link.gitcode.com/i/cbdab754c4b6624d1aa9e2a492ae580c)、[Q8

gitblog_00541的博客 814

python 写一个简单的 telegram bot (电报机器人)

replit.com 环境配置太恶心了,只能使用 poetry.poetry 这个名字是挺好听,用起来也是很垃圾,太恶心。heroku.com 注册登录不方便,需要各种验证。所以,部署的问题,目前搁置。

waterHBO的博客 3197

Compose Navigation使用

如果使用纯Compose开发Android应用,在页面导航方面navigation-compose几乎是唯一选择。介绍一下navigation-compose的简单使用。

yuantian_shenhai的博客 2378

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3317

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Jetpack 之 Navigation 在 Activity 中的使用、Navigation findNavController 方法

Jetpack 之 Navigation 在 Activity 中的使用、Navigation findNavController 方法

weixin_52173250的博客 1530

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

HarmonyOS NEXT 应用开发实战(六、组件导航Navigation使用详解)

Navigation组件通常作为页面的根容器,支持单页面、分栏和自适应三种显示模式。开发者可以使用Navigation组件提供的属性来设置页面的标题栏、工具栏、导航栏等。NavRouter是Navigation组件中的特殊子组件,通常用于与Navigation组件配合使用,它默认提供了点击响应处理,不需要开发者自定义点击事件逻辑。NavRouter组件只有两个子组件,其中第二个子组件必须是NavDestination。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 4989

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android中的导航navigation的使用

Android中的导航(Navigation)是一种应用程序设计模式,它通过使用统一的用户界面来管理应用程序中的各种界面和交互。在Android中,导航主要通过使用Navigation SDK来实现,该SDK提供了一组工具和组件,可以帮助开发人员构建具有一致性和可访问性的用户界面。

m0_46368082的博客 2994

使用 Navigation Component 简化 Android 应用的页面导航

本文介绍了 Android 的 Navigation Component,它简化了应用中的页面导航、数据传递和返回栈管理。

2401_83198592的博客 1053

Android Navigation基本使用

Android Navigation基本使用

weixin_57380941的博客 3005

Android:安卓学习笔记之navigation的简单理解和使用

Jetpack提供了一个名为Navigation的组件,旨在方便开发者管理Fragment页面和Appbar

JMW1407的博客 1万+
上一篇: compose.material3 中的DatePicker在 desktop 平台同样可以适用
下一篇: compose 桌面开发中如何使用KOIN依赖注入
lynn8570_blog
博客等级 码龄10年 254粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值