在 Android/Jetpack Compose 中手动预填充导航后台

2023-12-27

是否可以在 Android/Jetpack Compose 中预填充导航后台?

我有一个深层链接,可以深入导航层次结构,但是,按后退时,它会导航到根路线。

Example:

Route.Main -> Route.List -> Route.Details(参数:id)

深层链接:https://mywebsite.com/details/id https://mywebsite.com/details/id

目前的行为: 它使用正确的参数打开 Route.Details,但是,在 onBack 时,它打开 Route.Main

期望的行为: 它应该打开 Route.List

我知道我可以手动“编程”此行为,但我更喜欢“配置”它。


我以前也遇到过类似的问题,似乎这是图书馆的预期行为。我的意思是,如果用户从显示 Screen_C 的深层链接打开应用程序,然后按返回,则应显示应用程序的主屏幕。因此,也许您需要重新验证应用程序的可用性。

但是,即使您想采取解决方法来手动处理后按。使用下面的函数

fun navigatingBack(
    navController: NavHostController,
    destinationRoute: String
) {
    val hasBackstackTheDestinationRoute = navController.backQueue.find {
        it.destination.route == destinationRoute
    } != null
    // if the destination is already in the backstack, simply go back
    if (hasBackstackTheDestinationRoute) {
        navController.popBackStack()
    } else {
        // otherwise, navigate to a new destination popping the current destination
        navController.navigate(destinationRoute) {
            navController.currentBackStackEntry?.destination?.route?.let {
                popUpTo(it) {
                    inclusive = true
                }
            }
        }
    }
}

假设您声明了屏幕ScreenA, ScreenB and ScreenC.

composable("__A__") {
    ScreenA(navController)
}
composable("__B__") {
    ScreenB(navController)
}
composable("__C__") {
    ScreenC(navController)
}

您可以执行以下操作:

@Composable
fun ScreenA(navController: NavHostController) {
    Button(onClick = {
        navController.navigate("__B__")
    }) {
        Text(text = "Screen A - Go to B")
    }
}

@Composable
fun ScreenB(navController: NavHostController) {
    Button(onClick = {
        navController.navigate("__C__")
    }) {
        Text(text = "Screen B - Go to C")
    }
    BackHandler {
        navigatingBack(navController, "__A__")
    }
}

@Composable
fun ScreenC(navController: NavHostController) {
    Text(text = "Screen C")
    BackHandler {
        navigatingBack(navController, "__B__")
    }
}

使用上面的示例,如果您直接导航到ScreenC然后按回车键,ScreenB将显示。类似的情况发生在ScreenB,其中ScreenA按下后退按钮时会显示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android/Jetpack Compose 中手动预填充导航后台 的相关文章

  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • UITextView linkTextAttributes 字体属性不适用于 NSAttributedString

    我有一个NSAttributedString从包含一些链接的 HTML 生成 属性字符串显示在 UITextView 中 我希望为链接应用不同的字体样式并正在设置linkTextAttributes为了这 我已经添加NSForeground
  • 如何使自动续订订阅与内部用户而不是 Apple ID 绑定?

    我似乎遇到了障碍 但本质上我在应用程序中拥有的是用户登录页面和创建帐户页面 当用户打开我的应用程序并创建新帐户时 他们的信息将存储在 Firebase 服务器 BaSS 上 现在我的问题是我将如何去做 以便对于通过我的应用程序创建帐户的每个
  • 在 Windows 中更改 org.eclipse.swt.widgets 背景颜色

    现在我正在尝试使用以下代码更改 org eclipse swt widgets Button 的背景颜色 Button sceneButton new Button border SWT TOGGLE SWT FLAT sceneButto
  • 识别矩阵中的值

    我有一个问题 然后我需要你的帮助来解决它 我有一个矩阵A A 0 0 1 2 3 4 0 1 2 3 4 0 0 0 0 0 0 1 2 3 4 0 1 2 3 4 0 0 然后我想知道矩阵 A 中每行的每个值 1 的个数与矩阵 A 中每行
  • ReferenceError:请求未定义

    我正在尝试复制一个脸书消息机器人 https developers facebook com docs messenger platform guides quick start但继续得到request is not defined 与 F
  • Prettier.js 方法关于换行格式的参数

    我正在运行 Prettier js VSCode 插件 prettier eslint cli 它将超过 80 个字符限制的方法参数格式化如下 将每个参数放在新行中 someMethod argumentOne argumentTwo ar
  • 值表/树

    我的问题 有没有办法创建价值树 类似于命令 TreeForm 的输出 但是节点中的值呢 我为什么要这个 我正在尝试编写一个完整的程序来分析我的实验课程的输出 每列数据作为一个符号分配 一般来说 每一列都是有意义的 它不仅仅是一堆不同的变量
  • 如何创建点分
    标签? [复制]

    这个问题在这里已经有答案了 如何使用 CSS 创建虚线或任何类型的 hr 线 双线 虚线等 hr 或者还有其他技巧吗 你可以有 hr style border top dotted 1px 那应该有效
  • 访问 json 树的叶子

    我有一个以下形式的 JSON 文件 id 442500000116137984 reply 0 children id 442502378957201408 reply 0 children id 442500001084612608 re
  • RestKit 映射 XML 元素主体

    如何为 XML 元素主体创建 RestKit 对象映射到对象属性 XML
  • 我可以在 GDB 的“内存访问”上设置断点吗?

    我正在通过 gdb 运行应用程序 并且我想在访问 更改特定变量的任何时间设置断点 有没有好的方法来做到这一点 我也对监视 C C 中的变量以查看它是否 何时发生变化的其他方法感兴趣 watch仅在写入时中断 rwatch让你继续阅读 并且a
  • App.config 替换单元测试

    我的持续集成服务器 TeamCity 配置为在构建时运行我们应用程序中的所有单元测试 在运行这些测试之前 我需要更改一些 appSettings 以使它们对我们的 CI 服务器有效 我通过使用 Visual Studio 提供的部署项目为我
  • Google Calendar Api 不要求 Oauth Screen

    我最近用过Google Calendar API 我已经创建了项目并生成了凭据 对于本地主机 我使用了以下凭据 installed client id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx apps google
  • 如何将LogCat内容保存到文件?

    我添加了调试字符串 使用 Log d 并希望在 logCat 内容的上下文中查看它们 LogCat 的 保存 图标有一个 保存所选项目 提示 但必须有一种快速方法来保存整个内容 或选择整个内容 但我不知道该怎么做 要将 Log cat 内容
  • 如何在预测后保留 xts 时间序列数据中的日期

    请考虑这个小数据集 library xts library ggplot2 library forecast data lt data frame idDate c 12 12 2012 13 12 2012 14 12 2012 16 1
  • 如何使用 Google Sheets 脚本查找列中第一个匹配项的索引?

    我正在尝试使用 Google Sheets 脚本查找列中第一个匹配项的索引 function getRowIndex var lookupValue car var ss SpreadsheetApp getActiveSpreadshee
  • bean实例化失败;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/log4j/Logger

    我试图让公共日志记录适用于 log4j 配置 但在启动服务器时不断出现异常 当尝试使用 StringUtils 时 我也遇到了类似的异常 该异常可通过另一个公共库获得 org springframework beans factory Be
  • 具有自定义接收器的 Spark 结构化流中的输入行数

    我在结构化流 spark 2 2 0 中使用自定义接收器 并注意到 Spark 为输入行数生成了错误的指标 它始终为零 我的流构建 StreamingQuery writeStream session readStream schema R
  • 如何根据嵌套键值删除JSONB列中的数组元素?

    如何根据对象键之一的值从数组中删除对象 该数组嵌套在父对象内 这是一个示例结构 foo1 bar1 123 bar2 456 bar1 789 bar2 42 foo2 some other stuff 我可以根据以下值删除数组元素吗bar
  • 在 Android/Jetpack Compose 中手动预填充导航后台

    是否可以在 Android Jetpack Compose 中预填充导航后台 我有一个深层链接 可以深入导航层次结构 但是 按后退时 它会导航到根路线 Example Route Main gt Route List gt Route De