Navigation中,怎么用这个app:launchSingleTop="true"

我用最通俗的大白话给你讲清楚,保证你一听就懂!

app:launchSingleTop="true" = 防止重复打开同一个页面

它的作用就是:当你要跳转到的页面已经在返回栈的最顶部时,不再创建一个新的页面,而是直接复用现有的那个。


核心比喻:电梯顶层

想象一下,你在一栋大楼里:

  • 返回栈 = 电梯楼层
  • 当前页面 = 电梯当前所在楼层

如果你现在在 5 楼 (返回栈顶部是 5 楼),然后你又按了去 5 楼 的按钮:

  • 没有 launchSingleTop:电梯会再开一个新的 5 楼,你现在在两个 5 楼之上。
  • launchSingleTop="true" :电梯不会动,因为你已经在 5 楼了。

最经典的场景:防止重复点击

假设你有一个按钮,点击后跳转到当前页面(比如刷新页面):

xml

ini 复制代码
<action
    android:id="@+id/action_myFragment_to_myFragment"
    app:destination="@id/myFragment"
    app:launchSingleTop="true" />

效果

  • 第一次点击:正常跳转到 myFragment
  • 第二次点击:因为 myFragment 已经在顶部,不会再创建一个新的,而是直接复用。

这样就避免了返回栈里出现多个相同的页面。


两种使用方式

1. 在 XML 中静态设置(推荐)

xml

ini 复制代码
<action
    android:id="@+id/action_home_to_detail"
    app:destination="@id/detailFragment"
    app:launchSingleTop="true" />

2. 在代码中动态设置

kotlin

scss 复制代码
val navOptions = NavOptions.Builder()
    .setLaunchSingleTop(true)
    .build()

findNavController().navigate(R.id.action_home_to_detail, null, navOptions)

一句话总结

launchSingleTop="true" 就是用来防止重复打开同一个页面的,确保返回栈顶部始终只有一个实例。

相关推荐
杉氧2 天前
KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头
android·架构·android jetpack
木易士心4 天前
Jetpack Compose 深度解析:初始组合与重组的底层奥秘
android jetpack
alexhilton7 天前
MVI模式的完整历史、误解和现代Android范式
android·kotlin·android jetpack
我命由我123458 天前
集成 mupdf-android 的示例做为模块使用报错,程序包android.support.v4.view不存在
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我命由我1234511 天前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
MiyamuraMiyako11 天前
Compose:从自动滚动到双锚点 LazyLayout
android·android jetpack
杉氧14 天前
Compose 渲染内核 (3):Slot Table 与 Gap Buffer —— 极速重组的数学艺术
android·架构·android jetpack
alexhilton15 天前
Kotlin DSL深度解析:从Gradle脚本到构建你自己的DSL
android·kotlin·android jetpack
杉氧17 天前
Framework 补完计划 (2):BufferQueue 与 SurfaceFlinger —— 像素的跨进程“接力赛”
android·架构·android jetpack
我命由我1234518 天前
Android 开发问题:ClickableSpan 的点击事件没有生效
java·java-ee·android studio·android jetpack·android-studio·android runtime