- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含 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/
我是一名优秀的程序员,十分优秀!