#1 Navigation
#1-1 ์กํฐ๋นํฐ ๋ฐ ํ๋๊ทธ๋จผํธ ๊ตฌ์ฑ์ ํธ๋ ๋
์์ฆ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ํธ๋ ๋๋ ํ๋์ ์กํฐ๋นํฐ, ์ฌ๋ฌ ๊ฐ์ ํ๋๊ทธ๋จผํธ๋ค. ์ด๋ ๊ตฌ๊ธ์ ๊ถ์ฅ์ฌํญ์ด๊ธฐ๋ ํ๋ค. ์ด ํธ๋ ๋์์ ๋จ์ผ ์กํฐ๋นํฐ๋ ์ผ์ข
์ '๋น ๊ทธ๋ฆ'์ผ๋ก์๋ง ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ์ ์๋ฏธํ ํ๋ฉด ์ปจํ
์ธ ๋ ์ ๋ถ ํ๋๊ทธ๋จผํธ๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค.
#1-2 Navigation architecture component library
ํ์ | Android ๊ฐ๋ฐ์ | Android Developers
Android Jetpack์ ํ์ ๊ตฌ์ฑ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์์ ํ์ ๊ตฌํ
developer.android.com
๊ทธ๋ฌ๋, ์กํฐ๋นํฐ์ ํ๋๊ทธ๋จผํธ ๊ฐ์ ์ ํ(Navigation)๊ณผ ํ๋ฆ์ ์ผ์ผ์ด ๊ตฌํํ๋ ๊ฒ์ ๊ณจ์น์ํ ์ผ์ด๋ค. ์ด ๋, ์๋๋ก์ด๋ Jetpack์ Navigation architecture component library๋ Navigation์ ์ ์ฌ์ด ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ 3๊ฐ์ ํต์ฌ ์์๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ก Navigation graph, NavHostFragment, NavController๋ค.
#1-3 Navigation graph
Navigation graph๋ xml ํ์ผ์ ํํ์ด๋ฉฐ, Navigation(ํ๋๊ทธ๋จผํธ ์ ํ)๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ธด Resource File์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก nav_graph.xml๋ผ๋ ์ด๋ฆ์ผ๋ก ์กด์ฌํ๋ค.
#1-4 NavHostFragment
ํ๋๊ทธ๋จผํธ๋ ์กํฐ๋นํฐ์ ๋ด๊ธฐ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ํ๋๊ทธ๋จผํธ๋ฅผ ํ์ ์๋ ์๋ค. NavHostFragment๋ ๋ค๋ฅธ Fragment ํ๋, ๋ง ๊ทธ๋๋ก Hostํ๋ Fragment๋ค. NavHostFragment๊ฐ ์ ๊ณตํ๋ Host์ '์๋'์ผ๋ก์ ๋ค์ด๊ฐ๋ ํ๋๊ทธ๋จผํธ๋ค์ ๋ชฉ์ ์ง(Destination) ํ๋๊ทธ๋จผํธ๋ผ ๋ถ๋ฅธ๋ค. ์ฌ๊ธฐ์ ๋งํ๋ '๋ชฉ์ ์ง'๋ Navigation์ ๋์ฐฉ์ง๋ผ๋ ์๋ฏธ๋ค. ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด, Activity์ NavHostFragment๊ฐ ๋ด๊ธฐ๊ณ , NavHostFragment์ Destination Fragment๊ฐ ๋ด๊ธด๋ค.
#1-5 NavController
NavController๋ Navigation graph์์ ์ถ๊ฐํ๋ Destination Fragment๋ค์ Navigation(์ ํ)์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค.
#2 Navigation ์ฌ์ฉ์ ์ํ ์ค๋น
#2-1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ตฌํ๋ ์ํ ์ฑ
[Android] Data Binding - ๊ธฐ์ด
#1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ ์ #1-1 ์์ ์ฑ ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑ์ด ์๋ค. Button์ ๋๋ฅด๋ฉด, EditText์ text๊ฐ ๋ฐ๋ก ์์ ์๋ TextView์ text์ ๋์ ๋๋ค. ์ด ์ฑ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. #1-2 activity_main.xml #1-3 Main
kenel.tistory.com
์ด๋ค ์ฑ์ ๋ง๋ค๋ ์ฑ์ ์ ์ฌ์ ์ธ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ ๊ฒ์๊ธ์ ์๋ ๋ฐฉ๋ฒ๋๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ๋ค. Module ์์ค build.gradle์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ์ฉํ๊ณ , activity_main.xml์ <layout> ํ๊ทธ๋ก ๊ฐ์ผ๋ค. MainActivity.kt์์ setContentView()๋ฅผ DataBindingUtil์ ํตํด ์ํํ๊ณ , ์ด๋ฅผ ActivityMainBinding ํด๋์ค์ ๊ฐ์ฒด์ธ binding์ ํ ๋นํ๋ค.
#2-2 build.gradle.kts (Module)์์ Navigation ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋
plugins {
...
}
android {
...
}
dependencies {
val nav_version = "2.7.6"
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version") // Navigation
implementation("androidx.navigation:navigation-ui-ktx:$nav_version") // Navigation
...
}
dependencies { ... }์ ์ฌ๊ธฐ์ ์๋ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ค.
#2-3 build.gradle.kts (Project)์์ Safe Args ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
buildscript {
repositories {
google() // ๊ตฌ๊ธ์ Maven repository์์ ๋ค์ด๋ก๋ํ๊ธฐ ์ํด์
}
dependencies {
val nav_version = "2.7.6"
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
}
}
ํ๋๊ทธ๋จผํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ Safe Args ํ๋ฌ๊ทธ์ธ๋ ๋ฑ๋กํ๋ค.
#2-4 Navagation graph ๋ง๋ค๊ธฐ
๋ชจ๋์ ์ด๋ฆ(์ฌ๊ธฐ์๋ "app")์ ์ฐํด๋ฆญํ๋ฉด ๋์ค๋ ๋ฉ๋ด์์ [New] - [Android Resource File]์ ํด๋ฆญํ๋ค.
์ด๋ฆ์๋ nav_graph๋ฅผ, Resource type์ Navigation์ผ๋ก ์ค์ ํ๊ณ , OK ๋ฒํผ์ ๋๋ฅธ๋ค.
#2-5 activity_main.xml์์ NavHostFragment ๋ง๋ค๊ธฐ
<?xml version="1.0" encoding="utf-8"?>
<layout ...>
<androidx.constraintlayout.widget.ConstraintLayout ...>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginBottom="1dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
activity_main.xml์ <androidx.fragment.app.FragmentContainerView>๋ฅผ ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ id์ layout ๊ด๋ จ ์์ฑ์ ํ๋ก๊ทธ๋๋จธ ๋ง์๋๋ก ๊ฐ์ ํ ๋นํ๋ค.
<?xml version="1.0" encoding="utf-8"?>
<layout ...>
<androidx.constraintlayout.widget.ConstraintLayout ...>
<androidx.fragment.app.FragmentContainerView
...
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
๊ทธ๋ฆฌ๊ณ NavHostFragment์ ๋์์ ์ข์ฐํ 3๊ฐ์ง์ ์ค์ํ ์์ฑ๋ ์ถ๊ฐํ๋ค.
android:name ์์ฑ์ ํด๋น <androidx.fragment.app.FragmentContainerView> ํ๊ทธ๊ฐ androidx.navigation.fragment.NavHostFragment ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ฉฐ, ์ด ํด๋์ค์ ์ธ์คํด์ค๋ก์ ๋ฐํ์ ์ค์ ์์ฑ๋ ๊ฒ์์ ์๋ฏธํ๋ค.
app:defaultNavHost์ ๊ฐ์ด true๋ฉด, ํด๋น ํ๋๊ทธ๋จผํธ๊ฐ ์๋๋ก์ด๋ ํด๋ํฐ์ '๋ค๋ก ๊ฐ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ์ ๋ ๋ฐ์ํ๋ Fragment๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค. ํ ๊ฐ์ ์กํฐ๋นํฐ์ 2๊ฐ ์ด์์ ํ๋๊ทธ๋จผํธ ํธ์คํธ๊ฐ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์์ฑ์ด ์๋ ๊ฒ์ด๋ค.
๋ง์ง๋ง์ผ๋ก app:navGraph ์์ฑ์๋ ํด๋น NavHostFragment๊ฐ ์ฌ์ฉํ Navigation graph๋ฅผ ํ ๋นํ๋ค. #2-4์์ ๋ง๋ ๋ด๋น๊ฒ์ด์
๊ทธ๋ํ๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
#3 ์์ฝ
Navigation ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ๋ค.
#4 ์์ฑ๋ ์ฑ
android-practice/navigation/SetupEnvironment at master · Kanmanemone/android-practice
Contribute to Kanmanemone/android-practice development by creating an account on GitHub.
github.com
#5 ์ด์ด์ง๋ ๊ธ
[Android] Navigation - ๊ธฐ์ด
#1 ์ด์ ๊ธ [Android] Navigation - ํ๊ฒฝ ์ค์ #1 Navigation#1-1 ์กํฐ๋นํฐ ๋ฐ ํ๋๊ทธ๋จผํธ ๊ตฌ์ฑ์ ํธ๋ ๋์์ฆ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ํธ๋ ๋๋ ํ๋์ ์กํฐ๋นํฐ, ์ฌ๋ฌ ๊ฐ์ ํ๋๊ทธ๋จผํธ๋ค. ์ด๋ ๊ตฌ๊ธ์ ๊ถ์ฅ์ฌํญ
kenel.tistory.com
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Navigation - ์ ๋๋ฉ์ด์ (1) | 2024.01.27 |
---|---|
[Android] Navigation - ๊ธฐ์ด (0) | 2024.01.26 |
[Android] Fragment์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.01.24 |
[Android] Activity์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.01.23 |
[Android] MVVM ๊ตฌ์กฐ ํ๋์ ๋ณด๊ธฐ (0) | 2024.01.22 |