gpt4 book ai didi

java - Android 导航架构组件 : How to pass bundle data to startDestination

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:50:51 27 4
gpt4 key购买 nike

我有一个包含 NavHostFragment 的 Activity 。该 Activity 在其 Intent 中接收某些值。我想将此数据传递给导航图的第一个 fragment ,即 startDestination。我找不到与此相关的任何文档。

我已经经历了this question on SO但我似乎找不到 navController.getGraph()addDefaultArguments 方法。

是否可以将 bundle 传递给 startDestination

最佳答案

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

在撰写此答案时,我正在使用 Navigation 2.2.0-alpha01

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

获取导航 Controller :

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

然后在主机 Activity 的onCreate()

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

或者,如果您想将整个 intent extras 原样传递给 startDestination:

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

intent.extras会返回 Bundle只有

When you are setting the navGraph using setGraph() method, you should avoid setting the app:NavGraph attribute in the NavHostFragment definition, because doing so results in inflating and setting the navigation graph twice.

在您的 startDestination fragment 中阅读这些参数时:

如果您使用的是 Safe Args Plugin (非常推荐),然后在您的 fragment 中:

private val args by navArgs<DummyFragmentArgs>()

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

哪里navArgs<>Android 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

关于java - Android 导航架构组件 : How to pass bundle data to startDestination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com