导航组件:将 safeArgs 从 activity 传递到片段
Navigation Component: pass safeArgs from activity to a fragment
我有两个图,所以第一个图从一个片段移动到 activity 将 safeArgs 传递给 activity。
val action = MyFragmentDirections.actionMyActivity(arg1, arg2)
Navigation.findNavController(view).navigate(action)
现在,我想将这些参数从 MyActivity
传递给属于此 activity 的片段。
我可以得到参数:
val args = MyActivity.fromBundle(intent.extras)
问题是 activity 没有 Directions
文件,所以我无法传递参数。
我不知道这是否值得推荐,但它确实有效:
val args = MyActivity.fromBundle(intent.extras)
navController.navigate(R.id.myActivityFragment, args.toBundle())
Navigation 1.0.0-alpha07 fixed the feature request 用于将参数传递到图形的起始目的地。
要使用它,您需要:
- 从您的
NavHostFragment
中删除 app:navGraph
属性
- 致电
findNavController(R.id.your_nav_host_fragment).setGraph(R.navigation.your_graph, intent.extras)
使用 NavHostFragment
的 R.id
和 app:navGraph
标签上的 R.navigation
。通过将参数传递到 setGraph
调用中,您的起始目的地将直接获取参数,而无需再次调用 navigate
(默认情况下,这将在您的后台堆栈上创建一个新的目的地实例 - 而不是你想要什么)。
我有两个图,所以第一个图从一个片段移动到 activity 将 safeArgs 传递给 activity。
val action = MyFragmentDirections.actionMyActivity(arg1, arg2)
Navigation.findNavController(view).navigate(action)
现在,我想将这些参数从 MyActivity
传递给属于此 activity 的片段。
我可以得到参数:
val args = MyActivity.fromBundle(intent.extras)
问题是 activity 没有 Directions
文件,所以我无法传递参数。
我不知道这是否值得推荐,但它确实有效:
val args = MyActivity.fromBundle(intent.extras)
navController.navigate(R.id.myActivityFragment, args.toBundle())
Navigation 1.0.0-alpha07 fixed the feature request 用于将参数传递到图形的起始目的地。
要使用它,您需要:
- 从您的
NavHostFragment
中删除 - 致电
findNavController(R.id.your_nav_host_fragment).setGraph(R.navigation.your_graph, intent.extras)
app:navGraph
属性
使用 NavHostFragment
的 R.id
和 app:navGraph
标签上的 R.navigation
。通过将参数传递到 setGraph
调用中,您的起始目的地将直接获取参数,而无需再次调用 navigate
(默认情况下,这将在您的后台堆栈上创建一个新的目的地实例 - 而不是你想要什么)。