[Android] Jetpack 네비게이션 컨트롤러 사용하기 (3)

반응형

지난 시간에는 네비게이션 컨트롤러를 만들기 위해서 설정을 하고 디자인을 해봤습니다. 오늘은 코드를 작성해서 네비게이션 그래프를 잘 동작하도록 만들어보겠습니다. 안드로이드는 오랫동안 이어져온 v4, v7, v8, v17과 같은 서포트 라이브러리를 통해서 하위 호환을 지원했었는데 이런 오래된 구조를 재 정립하고자 Android extension library (Androidx) 기반의 패키지 구조를 만들게 되었으며 이것들은 모두 젯팩의 구성요소입니다.  다시 말해 서포트 라이브러리와 코틀린 지원 도구 및 여러 라이브러리가 포함된 통합 지원 라이브러리라고 할 수 있습니다. 

 

 젯팩 컴포넌트 구성 

Androidx Jetpack

  • Architecture - 뷰를 포함한 UI 구성요소의 라이프 사이클 관리 및 LiveData와 뷰 모델, Room 데이터베이스 등을 포함합니다. 지금 배우고 있는 네비게이션이 이 파트의 컴포넌트입니다.
  • Foundation - 안드로이드의 시스템의 핵심 기능을 담당하는 컴포넌트이며, AppCompat과 Kotlin extensions 그리고 멀티덱스 등이 포함됩니다.
  • Behavior - 시스템 제어에 관련된 Download Manager, Permision, Notification 등이 포함된 컴포넌트입니다.
  • UI - UI 개발에 필요한 대부분의 라이브러리가 있습니다. 대표적으로 Fragment, Layout, Animation 등이 있습니다.

 

 네비게이션 컨트롤러 구현 코드 

우선 MainActivity에서는 아무것도 해주지 않아도 됩니다. nav_graph.xml에서 MainFragment를 최상위 객체로 가지고 있기 때문에 처음 시작은 MainFragment 코드부터 시작이 됩니다. 물론 Navigation 자체를 시작하는 부분은 MainActivity이라서 해당 코드도 동작은 합니다. 다만 수정할 부분이 없을 뿐이죠. 그럼 MainFragment 부터 수정해보겠습니다.

 

MainFragment.kt

 우선 NavController 타입의 변수를 하나 선언합니다. lateinit var 로 선언한 이유는 객체 생성과 동시에 해당 navigation을 알 수가 없기 때문입니다. onViewCreated에서 view를 가지고 Navigation 클래스의 findNavController static 함수를 통해 할당이 가능합니다.

 onViewCreate 함수에서 navController를 할당하고 next 버튼에 setOnClickListener 이벤트를 연결해줍니다.

MainFragment.kt


 

 

SecondFragment.kt

 이번에는 두 번째 Fragment인 SecondFragment를 수정해보겠습니다. MainFragment에서 처럼 NavController를 선언하고 onViewCreated에서 할당해 주었습니다. 이번에는 next, back 버튼에 각각 이벤트를 주어야 하는데 View.OnClickListener 인터페이스를 구현하겠습니다. 해당 구현을 하려면 다음과 같이 onClick 메서드를 작성해야 합니다.

 이제 3번째 화면인 ThirdFragment로 값을 전달하기 위해서 navigateWithText 함수를 만들고 bundle 객체를 만들어서 전달해 보겠습니다. next 버튼을 눌렀을 때 navigate() 함수에 해당 값이 포함돼서 다음 화면으로 전달됩니다.

SecondFragment.kt


 

 

ThirdFragment.kt

 마지막으로 ThirdFragment를 수정할 차례입니다. navController를 선언하고 View.OnClickListener를 구현하는 것은 모두 동일합니다만, 2번째 페이지인 SecondFragment.kt에서 전달된 값을 받는 부분이 포함되어 있습니다. arguments 객체에 포함돼서 들어오며 getString함수로 가져옵니다. Key는 이전 클래스에서 선언한 value라는 값으로 가져왔습니다.

ThirdFragment.kt


 

 

 

xeozin-and/NavigationTest

[Android] Jetpack 네비게이션 컨트롤러 사용하기. Contribute to xeozin-and/NavigationTest development by creating an account on GitHub.

github.com

 

총 3강에 걸쳐서 네비게이션 그래프에 대해서 알아봤습니다. 예제 코드를 다음 레파지토리에 저장해놨으니 참고하시면 좋을 것 같네요. 젯팩에 포함된 많은 라이브러리중에 컴포즈라는 선언형 UI 관련 툴이 있는데 SwiftUI와 아주 유사합니다. SwiftUI 공부가 끝나면 안드로이드 컴포즈 공부도 해봐야 할 것 같습니다. 이제 아이폰은 Interface Build가 필요 없을 수도 있을 것 같고 안드로이드는 XML이 필요 없을 것 같네요. 그 밖에도 젯펙 라이브러리에는 Room 데이터베이스와 같은 것도 있고 새로운 기술들이 많이 포함되어 있습니다.

반응형

댓글

Designed by JB FACTORY