Android 导航架构组件:如何将捆绑数据传递到 startDestination

2024-04-20

我有一项活动NavHostFragment。该活动在其意图中接收某些值。我想将此数据传递给第一个片段,即startDestination的导航图。我找不到任何与此相关的文档。

我已经经历过这个问题关于SO https://stackoverflow.com/questions/50334550/navigation-architecture-component-passing-argument-data-to-the-startdestination但我似乎找不到addDefaultArguments方法用于navController.getGraph().

是否可以将捆绑包传递给startDestination?


回答我自己的问题,因为我在更新的导航文档中找到了正确的方法。

在写这个答案时,我正在使用Navigation 2.2.0-alpha01

如果您想将一些数据作为主机活动的参数直接传递到起始目的地,则需要在主机活动的 onCreate() 方法中手动设置主机的导航图,如下所示:

获取 navController:

val navController by lazy { findNavController(R.id.<your_nav_host_id>) }

然后在宿主活动中onCreate()

val bundle = Bundle()
bundle.putString("some_argument", "some_value")
navController.setGraph(R.navigation.<you_nav_graph_xml>, bundle)

或者,如果您想将整个意图附加信息原样传递给 startDestination:

navController.setGraph(R.navigation.<you_nav_graph_xml>, intent.extras)

Since intent.extras会返回一个Bundle only

当您使用 setGraph() 方法设置 navGraph 时,应避免设置 app:NavGraph 属性 NavHostFragment 定义,因为这样做会导致膨胀 并设置导航图两次。

在阅读 startDestination 片段中的这些参数时:

如果您正在使用安全参数插件 https://developer.android.com/guide/navigation/navigation-pass-data#Safe-args(这是非常推荐的),然后在你的片段中:

private val args by navArgs<DummyFragmentArgs>()

Safe Args 插件将通过将 Args 附加到您的片段名称来生成 Args 类。例如,如果您的片段被称为DummyFragment然后 Safe Args 会生成一个名为DummyFragmentArgs

where navArgs<>是定义在中的扩展函数安卓KTX https://developer.android.com/kotlin/ktx

如果您不使用 Android KTX,您可以获取 args 对象,如下所示:

val args = DummyFragmentArgs.fromBundle(arguments!!)

获取参数对象后,您可以简单地获取参数:

args.someArgument

注意我们是如何通过的"some_argument"作为论证,我们将其解读为someArgument使用安全参数

如果您不使用 Safe Args(但没有理由不使用它),您可以像这样访问您的参数:

arguments?.getString("some_argument")

所有这些都记录在迁移到导航组件文档中:https://developer.android.com/guide/navigation/navigation-migrate#pass_activity_destination_args_to_a_start_destination_fragment https://developer.android.com/guide/navigation/navigation-migrate#pass_activity_destination_args_to_a_start_destination_fragment

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

Android 导航架构组件:如何将捆绑数据传递到 startDestination 的相关文章