[Kotlin/Android] navigation safe args
1. navigation safe args
Safe Args라는 Gradle 플러그인이 있어서 모든 연결된 인수에 대해 유형 안전성을 갖춘 탐색 및 액세스를 하기 위한 간단한 객체 및 빌더 클래스이며, 안전성을 보장한다.
(developer.android.com/guide/navigation/navigation-pass-data?hl=ko)
2. 사용 방법
1) build.gradle (Project)
ext {
version_navigation = "2.3.0"
}
dependencies {
...
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$version_navigation"
}
2) build.gradle (ProjectModule:App)
...
apply plugin: 'androidx.navigation.safeargs'
...
3) res/navigation/navigation.xml 에서 Fragment 선택 후 Arguments 추가
ex) name : numQuestion
value : Integer
4) 이동할 네비게이션 설정 (다음 Fragment으로 인자값 전달)
// (Fragment Class 이름 + Directions).(navigation id)(넘겨줄 인자 값)
view.findNavController().navigate(GameFragmentDirections.actionGameFragmentToGameWonFragment(5))
5) 인자값을 넘긴 Fragment.kt (ex GameWonFragment.kt)
var args = GameWonFragmentArgs.fromBundle(arguments!!)
Toast.makeText(context, "NumberQuestion : ${args.numQuestion}", Toast.LENGTH_LONG).show()
3. safe args 사용하면서 느낀점.
1) 기존에 사용하던 Bundle 을 safe arge 으로 대체가 되었다.
2) 네비게이션에 argument 를 추가하지 않으면 GameWonFragmentArgs 자체가 접근이 불가능했다.
3) 네비게이션에 argmunet type을 Integer 으로하고,
GameFragmentDirections.actionGameFragmentToGameWonFragment("a") 다른 타입으로 넘긴다면 컴파일 단계에서 오류가 발생했다.
4) ${args.numQuestion} 형식처럼, 명확하게 데이터를 전달해서 사용할 수 있었다.
4. sage args 사용 후 느낀점
기존에 사용했던 bundle.setKet(key, value) 방식보다는 navigation safe args을 사용하면 보다 안전하고 확실하고 안전하게 데이터를 공유할 수 있었다.