Jetpack 导航到一个共同的目的地

Jetpack navigation to a common destination

我一直在使用 Jetpack 中的新 Navigation-API,但遇到了一个问题,我找不到令人满意的解决方案。

基本上,我正在创建的应用程序包含大量不同的片段。大多数片段与后端通信,当它们这样做时,它们会发现它们的会话已超时。发生这种情况时,我想转到登录片段。我能够做到这一点的唯一方法是为每个片段创建一个动作,并将目标指向登录屏幕。这是我宁愿避免的很多样板。有更简单的方法吗?

对于此用例,您可以使用全局操作。要创建全局操作,select 导航图中所需的目的地。右键单击并在菜单 select“添加操作”中单击“全局”,这将在您的导航图根元素中创建一个全局操作:

<action android:id="@+id/action_global_signInFragment" app:destination="@id/signInFragment"/>

现在您可以通过调用 navigation() 方法并将所需全局操作的 ID 传递给它来使用全局操作:

NavHostFragment.findNavController(this).navigate(R.id.action_global_signInFragment)

https://developer.android.com/topic/libraries/architecture/navigation/navigation-global-action

我宁愿post另一种更适合传递参数和数据的方式:

  1. 检查以在您的 build.gradle (app)
  2. 中使用这两个依赖项
  // Navigation Component
        implementation "androidx.navigation:navigation-fragment-ktx:$navigationVersion"
        implementation "androidx.navigation:navigation-ui-ktx:$navigationVersion"
  1. 在 nav_graph.xml 中添加全局操作,因为 @Alex 已发布,或者右键单击您的片段并添加操作 -> 全局,如下所示

  2. 现在在你要去这个目的地的片段中,只需调用 NavGraphDirections 并找到你的全局操作,如下所示

     val action = NavGraphDirections.actionGlobalInternalLinkDispatcher()
            findNavController().navigate(action)

actionGlobalInternalLinkDispatcher() is my Global distanition action find your case

  1. 如果您想添加一个参数并简单地传递,可以在 nav_graph.xml 中添加您的参数,然后在这里传递您正确的参数,如下所示:
    val action = NavGraphDirections.actionGlobalInternalLinkDispatcher(myArgumentExample)
            findNavController().navigate(action)

我建议在 youtube 上观看这个视频会有帮助 Menu & Global Actions - Getting Started With Navigation Component #6