대상 간 이동을 위해 Safe Args Gradle 플러그인을 사용하는 것이 좋습니다. 이 플러그인은 대상 간에 유형 안전 탐색을 할 수 있도록 하는 객체 및 빌더 클래스를 생성합니다. 대상 간 데이터 전달 및 탐색에 Safe Args를 사용하세요.
Safe Args 사용 설정
프로젝트에 Safe Args를 추가하려면 최상위 build.gradle
파일에 다음의 classpath
를 포함합니다.
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
또한 사용 가능한 두 가지 플러그인 중 하나를 적용해야 합니다.
자바 모듈 또는 자바와 Kotlin 혼합 모듈에 적합한 자바 언어 코드를 생성하려면 앱 또는 모듈의 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") }
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()
에 전달하면 됩니다.
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.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
또한 사용 가능한 두 가지 플러그인 중 하나를 적용해야 합니다.
자바 모듈 또는 자바와 Kotlin 혼합 모듈에 적합한 자바 언어 코드를 생성하려면 앱 또는 모듈의 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") }
AndroidX로 이전에 따라 gradle.properties
파일에 android.useAndroidX=true
가 있어야 합니다.
Safe Args를 사용 설정하면 플러그인은 정의된 각 작업의 클래스 및 메서드가 포함된 코드를 생성합니다. Safe Args는 각 작업마다 작업이 탐색을 시작하는 대상인 각 발신 대상의 클래스도 생성합니다. 생성된 클래스 이름은 발신 대상 클래스 이름과 'Directions'라는 단어의 조합입니다. 예를 들어 대상의 이름이 SpecifyAmountFragment
라면 생성된 클래스의 이름은 SpecifyAmountFragmentDirections
입니다. 생성된 클래스에는 발신 대상에서 정의한 각 작업의 정적 메서드가 포함됩니다. 이 메서드는 정의된 작업 매개변수를 인수로 사용하고 navigate()
에 전달할 수 있는 NavDirections
객체를 반환합니다.
예를 들어 발신 대상(SpecifyAmountFragment
)을 수신 대상(ConfirmationFragment
)에 연결하는 단일 작업이 포함된 탐색 그래프가 있다고 가정해 보겠습니다.
Safe Args는 NavDirections
객체를 반환하는 actionSpecifyAmountFragmentToConfirmationFragment()
라는 단일 메서드가 있는 SpecifyAmountFragmentDirections
클래스를 생성합니다. 그런 다음 아래 예에 나와 있는 것처럼 이 반환된 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를 사용하여 유형 안전성을 갖춘 데이터 전달을 참고하세요.