Navigation
AAC Jetpack Navigation Component
Last updated
AAC Jetpack Navigation Component
Last updated
Android Architecture Component Library ์ค ํ๋์ธ Navigation
์ ๋ํด์ ๋์ น์ด๋ด
๋๋ค๐ง
Jetpack ์ค ํ๋์ธ Navigation Component ๋ ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ ๊ฐ์ ์ด๋์ ์์ ์ ์ด๊ณ ๊ฐ๋จํ๊ฒ ๋์์ฃผ๋ ์ปดํฌ๋ํธ์ด๋ค. ๋ํ ํ๋ฉด๊ฐ์ ์ด๋์ iOS ์ storyboard ์ฒ๋ผ ์ง๊ดํํ ์ ์์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋ฉดํ๋ฆ์ ์ฝ๊ฒ ์ ์ ์๋ค. Android Document์ ๋ช ์๋ ๋ค๋น๊ฒ์ด์ ๋์ ์ผ๋ก ์ธํ ์ฅ์ ์ ์๋์ ๊ฐ๋ค.
ํ๋๊ทธ๋จผํธ ํธ๋์ญ์ ์ฒ๋ฆฌ
ํ๋ฉด๊ฐ์ ์ด๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ
์ ๋๋ฉ์ด์ ๊ณผ ์ ์ ๋ํ ํ์คํ๋ ๋ฆฌ์์ค ์ ๊ณต
๋ฅ ๋งํฌ ๊ตฌํ ๋ฐ ์ฒ๋ฆฌ ์ฉ์ด
์ต์ํ์ ์ถ๊ฐ์์ ์ผ๋ก ์๋จ ํด๋ฐ/ ํ๋จ ๋ค๋น๊ฒ์ด์ ์ ํฌํจ
Safe Args - ํ๋ฉด ์ ํ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ ๋ฌํ ๋ ์์ ์ฑ์ ์ ๊ณต
ViewModel ์ง์
Navigation Graph๋ชจ๋ ๋ค๋น๊ฒ์ด์ ๊ด๋ จ ์ ๋ณด๊ฐ ํ๋์ ๋ชจ์ฌ์๋ XML ๋ฆฌ์์ค์ด๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๋ด ํ๋ฉด๊ฐ์ ์ด๋์ ๋ํด ํ๋ก์ฐ๋ฅผ ์ง๊ดํํ์ฌ ํ ๋์ ์์๋ณด๊ธฐ ์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
NavHost
Navigation Graph
์์ ๋์์ ํ์ํ๋ ๋น ์ปจํ ์ด๋์ด๋ค. ๊ตฌ์ฑ์์์๋ ํ๋๊ทธ๋จผํธ ๋์์ ํ์ํ๋ ๊ธฐ๋ณธNavHost
๊ตฌํ์ธNavHostFragment
๊ฐ ํฌํจ๋๋ค.
NavController
NavHost
์์ ์ฑ ํ์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.NavController
๋ ์ฌ์ฉ์๊ฐ ์ฑ ๋ด์์ ์ด๋ํ ๋NavHost
์์ ๋์ ํ๋ฉด์ ์ ํ์ ์กฐ์ข ํ๋ค
- Navigation ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ (build.gradle)
- Navigation Graph ์ถ๊ฐ
res ๋๋ ํ ๋ฆฌ์์ New > Android Resource File ์ ์ ํํ๋ค.
ํ์ผ๋ช ์ ๋ ฅ (ex: nav_graph)
ResourceType ์ค์ ์ Navigation ์ผ๋ก ์ ํํ๋ค.
- NavHost ์ถ๊ฐ (activity_main.xml)
์กํฐ๋นํฐ์ ํ๋๊ทธ๋จผํธ๋ค์ ์ปจํ
์ด๋ ์ญํ ์ ํ๋ NavHost
๊ตฌํ์ธ NavHostFragment
๋ฅผ ์ถ๊ฐํ๋ค.
android:name
์์ฑ์ NavHost ๊ตฌํ์ ํด๋์ค ์ด๋ฆ์ ํฌํจํ๋ค.
app:navGraph
์์ฑ์ NavHostFragment ๋ฅผ Navigation Graph(
ํ์ ๊ทธ๋ํ) ์ ์ฐ๊ฒฐํ๋ค.
ํ์ ๊ทธ๋ํ๋ ์ฌ์ฉ์๊ฐ ์ด๋ํ ์ ์๋ ์ด NavHostFragment ์ ๋ชจ๋ ๋์์ ์ง์ ํ๋ค
app:defaultNavHost
์์ฑ์ true
๋ก ์ค์ ํ๋ฉด NavHostFragment ๊ฐ ์์คํ
๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๊ฐ๋ก์ฑ๋๋ค.
๋์ผํ ๋ ์ด์์์ ์ฌ๋ฌ ํธ์คํธ๊ฐ ์๋ค๋ฉด(์: ์ฐฝ์ด 2๊ฐ์ธ ๋ ์ด์์) ํ ํธ์คํธ๋ง ๊ธฐ๋ณธ NavHost๋ก ์ง์ ํด์ผ ํ๋ค.
- Navigation Graph ๋์ ์ถ๊ฐ
์ด์ ๋ค๋น๊ฒ์ด์
์์ ์ฌ์ฉํ ํ๋๊ทธ๋จผํธ๋ค์ nav_graph.xml ์ ์ถ๊ฐํ๋ค.
nav_graph.xml ํ์ผ์ ์ด๊ณ ์๋์ ์ฌ์ง์ ํ์๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ๋๊ทธ๋จผํธ ํด๋์ค ๋ชฉ๋ก์ด ๋ ธ์ถ๋๋ฉฐ ๋๋ธ ํด๋ฆญ ์, ๊ทธ๋ํ์ ํด๋น ํ๋๊ทธ๋จผํธ๊ฐ ์ถ๊ฐ๋๋ค.
app:startDestination
์์ฑ์ navHost๋ก ์ง์ ๋ ํด๋น ์กํฐ๋นํฐ๊ฐ ์คํ๋์์ ๋, ์ฒ์์ผ๋ก ์์ํ๋ ํ๋ฉด์ค์ ์ด๋ค. ์๋ fragment
ํ๊ทธ์ ์ ์๋ id ์ ๋์ผํด์ผ ํ๋ค.
android:label
์์ฑ์ ์ฌ์ฉ์๊ฐ ์ฝ์ ์ ์๋ ๋์ ์ด๋ฆ์ ํฌํจํ๋ค. ์๋ก NavGraph ๋ฅผ setupWithNavController()๋ฅผ ์ฌ์ฉํ์ฌ Toolbar์ ์ฐ๊ฒฐํ ๊ฒฝ์ฐ, UI์ ํด๋น ๋ผ๋ฒจ ๊ฐ์ด ํ์๋๋ค.
tools:layout
์์ฑ์ ํด๋น ํ๋๊ทธ๋จผํธ์ ๋ ์ด์์์ ์ฐ๊ฒฐํ์ฌ ๊ทธ๋ํ ํ๋ฉด์์ ํด๋น ํ๋ฉด์ ๋ฏธ๋ฆฌ๋ณด์ฌ์ค ์ ์๋ค.
- ํ๋ฉด๊ฐ์ ์ด๋ ๊ตฌํ
ํ๋๊ทธ๋จผํธ๋ฅผ ํ๋ ๋ ์์ฑํ๊ณ , ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ ๊ทธ๋ํ์ ๋์์ ์ถ๊ฐํ๋ค.
ํ๋๊ทธ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ณ Navigation Editor
์์ ํน์ ํ๋๊ทธ๋จผํธ๋ฅผ ํด๋ฆญํ๋ฉด ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ค๋ฅธ์ชฝ ์ค์์ ํฐ ๋๊ทธ๋ผ๋ฏธ๊ฐ ํ์๋๋ค. ํด๋น ๋ฒํผ์ ํด๋ฆญ ํ ์ฑ๋ก ์ด๋ํ๋ ค๋ ๋์(listFragment) ๋ก ๋๊ณ ๊ฐ๋ฉด XML ์ฝ๋์์ action
์ด๋ผ๋ ํ๊ทธ๊ฐ ์์ฑ๋๋ฉฐ ํ๋ฉด์ ํ ๋์ ์ง์ ์ ๋์ด๋ค.
์ด๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
ํ๋ฉด์ ํ 1๋ฒ๋ฐฉ์์ nav_graph ํ์ผ์ ์ ์๋ ์ก์ ํ๊ทธ์ ์์ด๋์ ๋์ผํ๋ค ํ๋ฉด์ ํ 2๋ฒ๋ฐฉ์์ ์ถํ์ ์์ฑํ safe-args ๊ด๋ จํ์ฌ ํ๋ฌ๊ทธ์ธ ์ค์ ํ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
NavDirection ์ Activity ์คํ๊ณผ ๋น๊ตํ๋ฉด Intent ์ ๋น์ทํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํ๋๊ฒ ์๋, Navigation์ ์ํด ์๋์ผ๋ก ์์ฑ๋๋ ํด๋์ค์ด๋ค. ์ ์์ ์ฝ๋์์ ์ธ๊ธํ SafeArgs ๋ Bundle ์์ NavGraph ์ ์ธ๊ณผ ๋์ผํ Type Data๋ฅผ ๊ฐ์ ธ์ค๋ Helper๋ก ์๊ฐํ๋ฉด ๋๋ค.