在目的地之间导航的推荐方法是使用 Safe Args Gradle 插件。此插件生成对象和构建器类,这些类支持在目的地之间进行类型安全的导航。使用 Safe Args 进行导航和在目的地之间传递数据。
启用 Safe Args
要将Safe Args添加到您的项目中,请在您的顶级build.gradle
文件中包含以下classpath
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您还必须应用两个可用插件之一。
要生成适合 Java 或混合 Java 和 Kotlin 模块的 Java 语言代码,请将此行添加到您的应用或模块的build.gradle
文件中
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
或者,要生成适合仅 Kotlin 模块的 Kotlin 代码,请添加
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
您必须在您的gradle.properties
文件中具有android.useAndroidX=true
,如迁移到 AndroidX中所述。
生成的代码
启用 Safe Args 后,生成的代码包含您定义的每个操作的类和方法,以及与每个发送和接收目的地相对应的类。
Safe Args 为每个目标生成一个类,这些目标是操作的来源。生成的类名会在源目标类名后面添加“Directions”。例如,如果源目标名为 SpecifyAmountFragment
,则生成的类名为 SpecifyAmountFragmentDirections
。
生成的类包含源目标中定义的每个操作的静态方法。此方法将任何定义的 操作参数 作为参数,并返回一个 NavDirections
对象,您可以将其直接传递给 navigate()
。
Safe Args 示例
例如,考虑一个导航图,其中包含一个连接两个目标(SpecifyAmountFragment
和 ConfirmationFragment
)的单个操作。 ConfirmationFragment
获取一个作为操作一部分提供的 float
参数。
Safe Args 生成一个 SpecifyAmountFragmentDirections
类,其中包含一个方法 actionSpecifyAmountFragmentToConfirmationFragment()
,以及一个名为 ActionSpecifyAmountFragmentToConfirmationFragment
的内部类。内部类派生自 NavDirections
并存储关联的操作 ID 和 float
参数。然后,返回的 NavDirections
对象可以直接传递给 navigate()
,如下例所示
Kotlin
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
Java
@Override
public void onClick(View view) {
float amount = ...;
action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount);
Navigation.findNavController(view).navigate(action);
}
有关使用 Safe Args 在目标之间传递数据的更多信息,请参阅 使用 Safe Args 以类型安全的方式传递数据。
确保使用 Safe Args 进行类型安全
使用 Safe Args Gradle 插件在目标之间导航。此插件生成简单的对象和构建器类,这些类支持目标之间类型安全的导航和参数传递。
要将Safe Args添加到您的项目中,请在您的顶级build.gradle
文件中包含以下classpath
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您还必须应用两个可用插件之一。
要生成适合 Java 或混合 Java 和 Kotlin 模块的 Java 语言代码,请将此行添加到您的应用或模块的build.gradle
文件中
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
或者,要生成适合仅 Kotlin 模块的 Kotlin 代码,请添加
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
您必须在您的gradle.properties
文件中具有android.useAndroidX=true
,如迁移到 AndroidX中所述。
启用 Safe Args 后,插件会生成包含每个已定义操作的类和方法的代码。对于每个操作,Safe Args 还会为每个源目标生成一个类,即操作源自的目标。生成的类名是源目标类名和“Directions”的组合。例如,如果目标名为 SpecifyAmountFragment
,则生成的类名为 SpecifyAmountFragmentDirections
。生成的类包含源目标中定义的每个操作的静态方法。此方法将任何定义的操作参数作为参数,并返回一个 NavDirections
对象,您可以将其传递给 navigate()
。
例如,假设我们有一个导航图,其中包含一个连接源目标 SpecifyAmountFragment
到接收目标 ConfirmationFragment
的单个操作。
Safe Args 生成一个 SpecifyAmountFragmentDirections
类,其中包含一个方法 actionSpecifyAmountFragmentToConfirmationFragment()
,该方法返回一个 NavDirections
对象。然后,返回的 NavDirections
对象可以直接传递给 navigate()
,如下例所示
Kotlin
override fun onClick(view: View) { val action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment() view.findNavController().navigate(action) }
Java
@Override public void onClick(View view) { NavDirections action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment(); Navigation.findNavController(view).navigate(action); }
有关使用 Safe Args 在目标之间传递数据的更多信息,请参阅在目标之间传递数据中的 使用 Safe Args 以类型安全的方式传递数据。