[Kotlin/Android] navigation safe args

Programming/Android 2020. 9. 1. 17:35 Posted by 생각하는로뎅
반응형

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

 

arguments를 추가된 모습

 

  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을 사용하면 보다 안전하고 확실하고 안전하게 데이터를 공유할 수 있었다.

반응형