📜  如何在Android中使用安全Args将数据传递到目的地?(1)

📅  最后修改于: 2023-12-03 14:52:39.208000             🧑  作者: Mango

如何在 Android 中使用安全 Args 将数据传递到目的地?

什么是安全 Args?

安全 Args 是一个库,用于将数据安全地传递给 Android 应用程序中的目的地。它基于类型安全的编程原则,使用编译时类型检查和自动生成代码来减少错误。

安全 Args 可以用于在不同的 Fragment、Activity 和 Service 之间传递数据,从而简化了应用程序中组件间通信的过程。

如何使用安全 Args?

使用安全 Args 的过程可分为以下几步:

  1. 添加安全 Args 依赖

在 app 模块的 build.gradle 文件中添加以下依赖:

dependencies {
    def nav_version = "2.3.5"

    // Java language implementation
    implementation "androidx.navigation:navigation-fragment:$nav_version"
    implementation "androidx.navigation:navigation-ui:$nav_version"

    // Kotlin
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
  1. 在 navigation.xml 文件中定义目的地

在 navigation.xml 文件中添加目的地,并定义其中的参数,如下所示:

<fragment android:id="@+id/destination_fragment"
    android:name="com.example.DestinationFragment">

    <argument
        android:name="argExample"
        app:argType="string"
        android:defaultValue="@string/default_value"/>

</fragment>

在上面的例子中,我们定义了一个名为 argExample 的字符串参数,并设置了默认值。

  1. 在源 Fragment、Activity 或 Service 中导航到目的地,并传递参数

在导航到目的地的代码中,使用 NavDirections 接口的实现类(这是安全 Args 自动生成的类)来传递参数。例如:

val action = SourceFragmentDirections.actionSourceFragmentToDestinationFragment(argExample = "example value")
findNavController().navigate(action)

在上面的例子中,我们将 argExample 参数设置为 "example value"。

  1. 在目的地中获取参数

在目的地的代码中,使用 getArguments() 方法获取参数。例如,在目的地 Fragment 的 onCreateView() 方法中可以这样写:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?): View? {

    val example = arguments?.getString("argExample")

    // use example parameter

    // ...

}
为什么要使用安全 Args?

使用安全 Args 有以下几个好处:

  • 类型安全:在编译时捕获类型相关的错误,避免了运行时出现的类型异常。
  • 轻松获取参数:由于安全 Args 自动生成了获取参数的代码,因此不需要手动编写从 Intent 或 Bundle 获取参数的逻辑。
  • 更少的代码:使用安全 Args 可以避免手动编写显式 Intent 和 Bundle 传递数据的代码,从而减少了应用程序中的样板代码。
  • 持续更新:如果您更改了目的地的参数,安全 Args 可以自动生成更新的代码,以便源 Fragment、Activity 或 Service 可以继续使用。
结论

使用安全 Args 可以让您在 Android 应用程序中安全地传递数据,同时减少了代码中的错误和样板代码。通过类型安全和自动生成的代码,您可以更轻松地获取参数和管理应用程序的组件间通信。