Pra*_*ngh 5 java android android-navigation android-architecture-components android-architecture-navigation
我有一个活动NavHostFragment。活动收到其意图的某些值。我想将此数据传递到startDestination导航图的第一个片段。我找不到与此有关的任何文档。
我已经在SO上解决了这个问题,但是我似乎找不到的addDefaultArguments方法navController.getGraph()。
可以将捆绑商品传递给startDestination吗?
Pra*_*ngh 13
回答我自己的问题,因为我在更新的导航文档中找到了正确的方法。
在撰写此答案时,我正在使用 Navigation 2.2.0-alpha01
如果您想将一些数据作为主机活动的参数直接传递到开始目的地,您需要在主机活动的 onCreate() 方法中手动设置您的主机导航图,如下所示:
获取您的导航控制器:
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)
由于intent.extras将返回Bundle唯一
使用 setGraph() 方法设置导航图时,应避免在 NavHostFragment 定义中设置 app:NavGraph 属性,因为这样做会导致导航图膨胀和设置两次。
在 startDestination 片段中阅读这些参数时:
如果您使用的是Safe Args 插件(非常推荐),则在您的片段中:
private val args by navArgs<DummyFragmentArgs>()
Safe Args 插件将通过将 Args 附加到您的片段名称来生成 Args 类。例如,如果您调用片段,DummyFragment那么 Safe Args 将生成一个名为的类DummyFragmentArgs
Android KTX中navArgs<>定义的扩展函数在哪里
如果您不使用 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
| 归档时间: | 
 | 
| 查看次数: | 2463 次 | 
| 最近记录: |