Android - 使用安全参数传递参数

Posted

技术标签:

【中文标题】Android - 使用安全参数传递参数【英文标题】:Android - Pass Argument with safe args 【发布时间】:2021-12-15 07:50:33 【问题描述】:

在一个活动中,两个片段在切换时传递了一些字符串。

大厅片段

        button.setOnClickListener 
            LobbyFragmentDirections.actionLobbyFToGameF(myTitle)
            findNavController(requireActivity(), R.id.fragment_container_view).navigate(R.id.gameFragment)
        

游戏片段

private val args: GameFragmentArgs by navArgs()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 
    val view = inflater.inflate(R.layout.fragment_game, container, false)
    UseArgument(args.argumentTitle)

导航图:游戏片段属性

问题

当获取游戏片段onViewCreated 中的参数时,它会抛出一个java.lang.IllegalArgumentException: Required argument "argumentTitle" is missing

【问题讨论】:

【参考方案1】:
button.setOnClickListener 
    val dir = LobbyFragmentDirections.actionLobbyFToGameF(myTitle)
    findNavController().navigate(dir)

【讨论】:

工作正常。谢谢 !当不传递参数时,使用这样的方向而不是像我第一次尝试那样传递目的地有什么不同吗? @Foxhunt 有两个区别,第一个参数不会被传递到目的地,除非你使用传统的 Bundle 对象;第二个是您没有使用导航组件的安全参数;除了允许传递参数之外,它还可以防止运行时错误,因为它会检查是否有参数,并且它与您在 navGraph 中想要的类型相同。 好的^^我在这里找到了更多细节***.com/questions/57608291/…

以上是关于Android - 使用安全参数传递参数的主要内容,如果未能解决你的问题,请参考以下文章

Android:Navigation使用safe args插件传递参数

如何使用安全参数将数据从导航抽屉传递到活动?

cpp 线程传递参数

部署期间如何使用 Azure Key Vault 传递安全参数值?

在 react-native android 应用程序中使用 axios 传递参数

Android启动广播时怎样往广播中传递参数