Navigation
AAC Jetpack Navigation Component
Android Architecture Component Library μ€ νλμΈ Navigation
μ λν΄μ λμ Ήμ΄λ΄
λλ€π§
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 κ΄λ ¨νμ¬ νλ¬κ·ΈμΈ μ€μ ν μ¬μ©μ΄ κ°λ₯νλ€
NavDirections
NavDirection μ Activity μ€νκ³Ό λΉκ΅νλ©΄ Intent μ λΉμ·νλ€. κ°λ°μκ° μ§μ μ€μ νλκ² μλ, Navigationμ μν΄ μλμΌλ‘ μμ±λλ ν΄λμ€μ΄λ€. μ μμ μ½λμμ μΈκΈν SafeArgs λ Bundle μμ NavGraph μ μΈκ³Ό λμΌν Type Dataλ₯Ό κ°μ Έμ€λ Helperλ‘ μκ°νλ©΄ λλ€.
Last updated