Compose中没有启动模式,怎么办?-教你模拟启动模式

简介: Compose中没有启动模式,怎么办?-教你模拟启动模式

关于设计模式


我们都知道在activity体系中是有多种启动模式的:standard、singleTop、singleInstance、singleTask四种。但是在compose中因为是单activity所以自然是没有启动模式的说法的,因此本文我使用一些NavHostController的一些api来实现启动模式中的效果。


standard


默认的效果就是standard的效果


singleTop


compose中我们可以通过判断顶部的页面是否是我们要启动的singleTop页面来处理。

如果顶部页面是singleTop的页面则直接刷新顶部页面。

判断代码:

/**
 * 判断顶部页面是否刚好是我们要路由的页面
 */
fun sameAsTopPage(controller: NavHostController,dstRoute: String):Boolean{
    val distination = controller.currentDestination?.route ?: ""
    return distination == dstRoute
}
复制代码


singleTask


我们的实现方式,会先判断当前的路由栈中是否存在目标页面,如果存在会直接回退到目标页面,中间页面会自动被销毁

fun toSingleInstance(controller: NavHostController, route: String){
    val findRoute = controller.findDestination(route)
    if (findRoute == null){
        controller.navigate(route)
    }else{
        controller.popBackStack()
        controller.navigate(route)
    }
}
复制代码


singleSinstance


目前我们没有太好的办法实现单例模式,所以这里没有实现。

不过compose中单例的场景也似乎的确也不存在,所以也就没关系了。

git: github.com/ananananzhu…



相关文章
|
数据安全/隐私保护
【鸿蒙软件开发】文本输入(TextInput/TextArea)
【鸿蒙软件开发】文本输入(TextInput/TextArea)
1739 0
|
Android开发
android Compose中沉浸式设计、导航栏、状态栏的处理
android Compose中沉浸式设计、导航栏、状态栏的处理
3194 0
android Compose中沉浸式设计、导航栏、状态栏的处理
|
缓存 JavaScript 前端开发
SpringBoot——Thymeleaf中的th:inline(内敛文本text、内敛脚本javascript)
SpringBoot——Thymeleaf中的th:inline(内敛文本text、内敛脚本javascript)
2589 0
SpringBoot——Thymeleaf中的th:inline(内敛文本text、内敛脚本javascript)
|
10月前
|
Ubuntu Unix Linux
24款Linux桌面,有没有你的最爱?
如果您不知所措,请记住台式机是可选的。除了发行版附带的内容外,没有其他尝试的义务。许多Linux的高级用户对Linux发行版摆设的任何桌面都是满意的。重要的是要获得可与您的计算机一起使用的Linux安装,并花一些时间来学习它的工作方式。最终,所有台式机都只能做同一件事:帮助您组织和管理重要数据。但是,如果您已经了解了有关默认桌面的所有知识,那么现在您可以在周末做多种尝试,并为您最喜欢的一款Linux桌面投上一票。
|
存储 XML 编译器
【Android 从入门到出门】第二章:使用声明式UI创建屏幕并探索组合原则
【Android 从入门到出门】第二章:使用声明式UI创建屏幕并探索组合原则
540 3
|
调度 Android开发 UED
Android经典实战之Android 14前台服务适配
本文介绍了在Android 14中适配前台服务的关键步骤与最佳实践,包括指定服务类型、请求权限、优化用户体验及使用WorkManager等。通过遵循这些指南,确保应用在新系统上顺畅运行并提升用户体验。
1241 6
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation 'org.greenrobot:eventbus:3.3.1'`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
MPAndroidChart 教程:突出显示值 Highlighting Values
本节主题是重点介绍通过tap-gesture和基于发行版v3.0.0以编程方式突出显示图表中条目。 启用/禁用突出显示 setHighlightPerDragEnabled(boolean enabled):在Chart 上将此设置为true,以便在完全缩小时在图表表面上进行每次拖动时突出显示,默认值:true setHighlightPerTapEnabled(boolean enabled):在Chart 上将此设置为false,以防止通过点击手势突出显示值。
2637 0