대상 간 이동을 위해 Safe Args Gradle 플러그인을 사용하는 것이 좋습니다. 이 플러그인은 대상 간에 유형 안전 탐색을 할 수 있도록 하는 객체 및 빌더 클래스를 생성합니다. 대상 간 데이터 전달 및 탐색에 Safe Args를 사용하세요.
Safe Args 사용 설정
如需将 Safe Args 添加到您的项目,请在顶层 build.gradle
文件中包含以下 classpath
:
buildscript { repositories { google() } dependencies { def nav_version = "2.8.6" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
buildscript { repositories { google() } dependencies { val nav_version = "2.8.6" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您还必须应用以下两个可用插件之一。
如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块的 build.gradle
文件中:
plugins { id 'androidx.navigation.safeargs' }
plugins { id("androidx.navigation.safeargs") }
此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:
plugins { id 'androidx.navigation.safeargs.kotlin' }
plugins { id("androidx.navigation.safeargs.kotlin") }
根据迁移到 AndroidX 文档,您的 gradle.properties
文件中必须具有 android.useAndroidX=true
。
생성된 코드
Safe Args를 사용 설정하면 생성된 코드에 정의한 작업의 클래스 및 메서드와 각 발신 및 수신 대상에 상응하는 클래스가 포함됩니다.
Safe Args는 작업이 발생하는 각 대상의 클래스를 생성합니다. 생성된 클래스 이름은 발신 대상 클래스 이름에 'Directions'를 붙입니다. 예를 들어, 발신 대상 이름이 SpecifyAmountFragment
라면 생성된 클래스 이름은 SpecifyAmountFragmentDirections
가 됩니다.
생성된 클래스에는 발신 대상에서 정의한 각 작업의 정적 메서드가 포함됩니다. 이 메서드는 정의된 모든 작업 매개변수를 인수로 사용하고 navigate()
에 직접 전달할 수 있는 NavDirections
객체를 반환합니다.
Safe Args 예
예를 들어 SpecifyAmountFragment
와 ConfirmationFragment
두 대상을 연결하는 단일 작업이 있는 탐색 그래프를 가정해 보겠습니다. ConfirmationFragment
는 작업의 일부로 제공되는 단일 float
매개변수를 사용합니다.
Safe Args는 단일 메서드(actionSpecifyAmountFragmentToConfirmationFragment()
)를 가진 SpecifyAmountFragmentDirections
클래스와 내부 클래스(ActionSpecifyAmountFragmentToConfirmationFragment
)를 생성합니다. 내부 클래스는 NavDirections
에서 파생된 클래스이며 연결된 작업 ID와 float
매개변수를 저장합니다. 그런 다음 아래 예와 같이 반환된 NavDirections
객체를 직접 navigate()
에 전달하면 됩니다.
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
@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
:
buildscript { repositories { google() } dependencies { def nav_version = "2.8.6" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
buildscript { repositories { google() } dependencies { val nav_version = "2.8.6" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您还必须应用以下两个可用插件之一。
如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块的 build.gradle
文件中:
plugins { id 'androidx.navigation.safeargs' }
plugins { id("androidx.navigation.safeargs") }
此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:
plugins { id 'androidx.navigation.safeargs.kotlin' }
plugins { id("androidx.navigation.safeargs.kotlin") }
根据迁移到 AndroidX 文档,您的 gradle.properties
文件中必须具有 android.useAndroidX=true
。
Safe Args를 사용 설정하면 플러그인은 정의된 각 작업의 클래스 및 메서드가 포함된 코드를 생성합니다. Safe Args는 각 작업마다 작업이 탐색을 시작하는 대상인 각 발신 대상의 클래스도 생성합니다. 생성된 클래스 이름은 발신 대상 클래스 이름과 'Directions'라는 단어의 조합입니다. 예를 들어 대상의 이름이 SpecifyAmountFragment
라면 생성된 클래스의 이름은 SpecifyAmountFragmentDirections
입니다. 생성된 클래스에는 발신 대상에서 정의한 각 작업의 정적 메서드가 포함됩니다. 이 메서드는 정의된 작업 매개변수를 인수로 사용하고 navigate()
에 전달할 수 있는 NavDirections
객체를 반환합니다.
예를 들어 발신 대상(SpecifyAmountFragment
)을 수신 대상(ConfirmationFragment
)에 연결하는 단일 작업이 포함된 탐색 그래프가 있다고 가정해 보겠습니다.
Safe Args는 NavDirections
객체를 반환하는 actionSpecifyAmountFragmentToConfirmationFragment()
라는 단일 메서드가 있는 SpecifyAmountFragmentDirections
클래스를 생성합니다. 그런 다음 아래 예에 나와 있는 것처럼 이 반환된 NavDirections
객체를 navigate()
에 직접 전달할 수 있습니다.
override fun onClick(view: View) {
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment()
view.findNavController().navigate(action)
}
@Override
public void onClick(View view) {
NavDirections action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment();
Navigation.findNavController(view).navigate(action);
}
Safe Args를 사용하여 대상 간에 데이터를 전달하는 방법에 관한 자세한 내용은 대상 간 데이터 전달에서 Safe Args를 사용하여 유형 안전성을 갖춘 데이터 전달을 참고하세요.