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 天前
从历史的角度看 Android 软件架构
android·架构·android jetpack
alexhilton3 天前
Android车载OS中的Remote Compose
android·kotlin·android jetpack
alexhilton9 天前
使用Android Archive进行打包
android·kotlin·android jetpack
Junerver12 天前
我写了一个 Compose Multiplatform 组件库,你可能会用到
kotlin·android jetpack
我命由我1234513 天前
Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字
android·java·开发语言·java-ee·android jetpack·android-studio·android runtime
QING61814 天前
Kotlin 日常开发常用语法糖整理 —— 速记
android·kotlin·android jetpack
我命由我1234514 天前
Android 开发问题:EditText 控件的 android:imeOptions=“actionDone“ 属性不生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我命由我1234514 天前
Android 开发问题:获取到的 Android ID 发生了变化
android·java·开发语言·java-ee·android studio·android jetpack·android runtime
我命由我1234514 天前
Android 开发问题:Unable to find explicit activity class
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我命由我1234514 天前
Android 开发问题:全局的主题颜色设置,导致 CheckBox 控件在勾选状态下不显示样式
android·java·开发语言·java-ee·intellij-idea·intellij idea·android jetpack