android - Android NavigationComponent - 更改活动后删除片段
问题描述
我面临一个关于使用导航组件的问题。
我有这个层次结构:
- Activity A由片段 f1和片段 f2组成
- 活动 B
当我在 f2 上时,我会像这样更改活动:
button.setOnClickListener {
startActivity(Intent(activityA, ActivityB::class.java))
}
我想要的是:当我去活动B时,应该删除(活动A的)片段f2 。因此,当我将终止活动 B 时,我将在没有片段 f2的情况下返回活动A。
为了说明流程:
- 活动 A (f1 > f2) > 活动 B (需要删除 f2 )
- 我什么时候回来:活动 B > 活动 A(仅限 f1)
我正在使用导航组件,并尝试在我的 nav_graph 中使用popUpTo和popUpToInclusive选项。我设法删除了片段,但是当我删除它时总是有一个小故障(即我们在通过活动 B 之前看到片段的删除,所以我们看到 f1 片段有一点时间)。我想让交易对用户不可见。
有没有办法做到这一点?不要犹豫,问我是否需要更高的精度。
谢谢你的回答,
解决方案
当您使用导航组件时,您可以有方向,然后使用导航组件从源片段/活动移动到目标片段/活动。例如:
val actionLockToLogin = LockFragmentDirections.actionLockToLogin()
NavHost.findNavController(this).navigate(actionLockToLogin)
在这段代码中,我从 LockFragment 转到 LoginFragment。只需在导航的 XML 中添加片段或活动。设置从源片段/活动到目标片段/活动的操作。并通过使用我向您展示的代码,尝试在它们之间导航。
推荐阅读
- python-3.x - 使用 cython 时出错“致命错误 C1083;无法打开包含文件:'io.h':没有这样的文件或目录”
- swift - 在 Swift 中异步合并两个字典
- c++ - 如何将int转换为字符串?
- angular - Nativescript - 装饰器不支持错误函数调用,但调用了“NativeScriptRouterModule”
- java - 如何使用 Spring Boot 将 @Cacheable 与 redis 一起使用
- nginx - 反向代理到两个单独的 nginx 实例
- node.js - 如何配置 rollupJs 将 nodeJs 脚本转换为 es6 模块?
- javascript - 在JS中使用按钮点击制作变量
- python - 如何在 Python 中使用 zip 函数并返回包含最大值的系列的索引?
- ios - iOS从Pasteboard复制粘贴文本有时可以正常工作,有时它会在textview中一段时间后消失