Android和Deep Links中的多个导航图

Mic*_*bro 11 android deep-linking android-navigation

我有3个活动:主要,登录,向导.

对于每个Activity,我都有单独的导航图和片段目的地.

主导航图还具有登录活动目的地,以便在注销时启动登录屏幕.

Action.MAIN启动器意图启动时,应用程序似乎正常工作.

但是在使用Deep Link时遇到问题.我想将URI添加到Login Nav Graph(更改密码片段).此导航图使用单独的NavHostFragment.我用过2种方法.

  1. 在登录导航图中直接添加深层链接到更改密码片段目的地 - >深层链接仅导航到START DESTINATION(登录片段目的地).这里也退回按钮不能正常工作,即完成应用程序而不是返回主导航图主要目的地.
  2. 将Deep Link添加到Login Activity Destinationin Main Nav Graph和again,这里Back按钮确实正常工作,我按预期登陆Login Fragment Destination.但在这里我想手动导航到更改密码片段目的地,我遇到另一个问题,即Intent Action.View与Uri数据不会传递到此登录活动目的地.它仅传递给主要活动,主要活动主持人.

总结一下.我认为由活动目的地连接的多个导航图之间的深层链接行为不能正常工作.我不知道是否有任何解决方案.

我能以某种方式从NavController检索Deep Link Arguments(Uri数据)吗?或者唯一的解决方案是从getIntent().data获取它?在这里,正如我所说,这个Intent不会转发到最终目标Activity,而只会转移到创建的Activities堆栈中的第一个Activity.

现在我回到手动处理没有Android导航架构的Deep Links,因为如果有比单个Nav Graph更复杂的导航结构,单个Activity并且只有内部Fragment导航,它似乎毫无用处.

Ann*_*nto 1

您应该仅使用一张主图来包含文档中所写的图表。

与意外的后按结果相关,请使用 NavDeepLinkRequest。

val request = NavDeepLinkRequest.Builder
    .fromUri("android-app://example.google.app/settings_fragment_two".toUri())
    .build()
findNavController().navigate(request)
Run Code Online (Sandbox Code Playgroud)

正如文档中所述,

与使用操作或目标 ID 导航不同,您可以导航到任何图表中的任何 URI,甚至可以跨模块导航。

使用 URI 导航时,返回堆栈不会重置。此行为与显式深层链接导航不同,后者在导航时会替换返回堆栈。

要在模块之间导航,请确保使用(主图的)主 navController。无论如何,您可以通过标签从其他模块调用它。