1. navigation safe args
Safe Args라는 Gradle 플러그인이 있어서 모든 연결된 인수에 대해 유형 안전성을 갖춘 탐색 및 액세스를 하기 위한 간단한 객체 및 빌더 클래스이며, 안전성을 보장한다.
(developer.android.com/guide/navigation/navigation-pass-data?hl=ko)
대상 간 데이터 전달 | Android 개발자 | Android Developers
탐색을 사용하면 대상 인수를 정의하여 탐색 작업에 데이터를 첨부할 수 있습니다. 예를 들어 사용자 프로필 대상은 사용자 ID 인수를 취해 표시할 사용자를 결정할 수 있습니다. 일반적으로 대�
developer.android.com
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을 사용하면 보다 안전하고 확실하고 안전하게 데이터를 공유할 수 있었다.
'Programming > Android' 카테고리의 다른 글
[Kotlin/Android] Timber Library (로깅 라이브러리) (0) | 2020.09.07 |
---|---|
[Kotlin/Android] DrawerLayout 특정 화면에서 사용자 액션 막기(화면 스와이프) With navigation (0) | 2020.09.02 |
[Kotlin/Android] Navigation (Pop behavior, navigateUp vs Back, ActionBar) (0) | 2020.09.01 |
[Kotlin/Android] Navigation (0) | 2020.09.01 |
[Kotlin/Android] DataBinding에서 Data Class 사용 (0) | 2020.08.31 |