导航组件,弹回到另一个模块目的地

发布于 2025-01-17 08:53:10 字数 182 浏览 0 评论 0原文

我有一个多模块项目,该项目使用导航组件在片段之间导航。这意味着要到达另一个模块,我必须使用findnavcontroller()。导航(NavDeeplinkRinkRequest,navoptions)启动DeepLink。当需要登录应用程序时,我需要在另一个模块中不可见的另一个模块中的目的地弹出后堆栈。我该如何实现?

I have a multi module project that uses Navigation Component to navigate between Fragments. This means that in order to get to another module, I have to launch a DeepLink using findNavController().navigate(NavDeepLinkRequest, NavOptions). When it comes time to log out of the application, I need to pop the back stack inclusive to a Destination in another module that is not visible to that module. How do I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街角卖回忆 2025-01-24 08:53:11

我遇到了完全相同的问题,我相信谷歌默认情况下不支持使用导航组件(这很遗憾)。然而,我设法使用老朋友getIdentifier以一种有点hacky的方式做到了这一点(但它有效)。

在您的 Fragment 中,您可能有这样的导航请求:

val navigateToOtherModuleRequest = NavDeepLinkRequest.Builder
    .fromUri("yourapp://othermoduledestination".toUri())
    .build()

然后使用 getIdentifier() 获取您需要弹出的资源 id(可以是 Fragment id 或在我的情况下nav graph id):

val homeNavGraphResourceId = resources.getIdentifier(
    "home_nav_graph",
    "id",
    requireContext().packageName
)

像这样定义navigationOptions

val navigationOptions = NavOptions.Builder()
    .setPopUpTo(
        destinationId = homeNavGraphResourceId,
        inclusive = true
    )
    .build()

并使用导航

findNavController().navigate(
    navigateToOtherModuleRequest,
    navigationOptions
)

希望这会有所帮助!

I had exactly the same issue and I believe Google doesn't support it by default using Navigation Component (which is sad). However I managed to do it in a bit hacky way (but it works) using old friend getIdentifier.

In your Fragment you may have a navigation request like this:

val navigateToOtherModuleRequest = NavDeepLinkRequest.Builder
    .fromUri("yourapp://othermoduledestination".toUri())
    .build()

Then get the resource id you need to pop-up to using getIdentifier() (it can be Fragment id or in my case nav graph id):

val homeNavGraphResourceId = resources.getIdentifier(
    "home_nav_graph",
    "id",
    requireContext().packageName
)

Define navigationOptions like this:

val navigationOptions = NavOptions.Builder()
    .setPopUpTo(
        destinationId = homeNavGraphResourceId,
        inclusive = true
    )
    .build()

And navigate using

findNavController().navigate(
    navigateToOtherModuleRequest,
    navigationOptions
)

Hope this will help!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文