์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- andoid
- SharedPreferences
- AAC
- ์ฝํ๋ฆฐ
- MVP
- ์๋๋ก์ด๋
- kotlin
- ์๋๋ก์ด๋ RecyclerView
- ViewPager
- android startActivityForResult
- android SharedPreferences
- activity
- android itemDecoration
- Navigation
- fragment
- android recyclerview
- ์๋๋ก์ด๋ ์๋ช ์ฃผ๊ธฐ
- android clipToPadding
- ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ
- Android
- ์๋๋ก์ด๋ ViewPager
- MVC
- MVVM
- recyclerview
- ์๋๋ก์ด๋ ์๋๋ก๊ทธ์ธ
- ์๋๋ก์ด๋ Bottom Navigation
- ์๋ช ์ฃผ๊ธฐ
- Bottom Navigation
- Today
- Total
my repository
Android :: JetPack - AAC Navigation Component ์ฌ์ฉ๋ฒ ๋ณธ๋ฌธ
๐กNavigation
Navigation
Android JetPack ์ AAC ์ปดํฌ๋ํธ ์ค ๋ค๋น๊ฒ์ด์ ์ ์ฑ ๋ด์ ํ๋ฉด ์ด๋ ๊ตฌํ์ ๋์์ฃผ๋ ์ปดํฌ๋ํธ์ด๋ค.
์๊ฐ์ ์ผ๋ก view๋ค์ด ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ ์ ์์ด ์ฑ์ ์ ๋ฐ์ ์ธ ํ๋ฆ์ ํ์ ํ๊ธฐ ์ฝ๊ณ , flow ์์ ์ด ์ฉ์ดํ๋ค.
๋ฐ๋ผ์, single Activity - multiple Fragment ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ฝ๊ฒ ํด์ค๋ค.
Navigation์ ์ฌ์ฉํ์ฌ ํ ์ ์๋ ๊ฒ๋ค
- Fragment ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ์ ์๋ค.
- Up, Back ๋ฒํผ์ ์์ ๋ฑ(๋ฐฑ ์คํ ๊ด๋ฆฌ)์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌ
- ํ๋ฉด ์ ํ ์, Animation์ด๋ Transition์ ์ํ ํ์คํ๋ ๋ฆฌ์์ค๋ฅผ ์ ๊ณต
- ๋ฅ๋งํฌ ๊ตฌํ ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
- Navigation UI ํจํด์ ์ฌ์ฉํ Navigation drawers, Bottom Navigation์ ์ฐ๋์ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๊ฒ ์ง์
- fragment ๊ฐ์ ์ด๋ ์ ์์ ํ๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ๋ฅ
- Navigation Editor๋ฅผ ํตํด ํ๋ฉด ํ๋ฆ์ ์๊ฐ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ViewModel - Navigation Graph์ ๋ํ ViewModel์ ํ์ธํด ๊ทธ๋ํ ๋์ ์ฌ์ด์ UI ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ค.
- ๊ธฐ์กด FragmentManager, Intent, Bundle ๋ฑ์ ์ฌ์ฉ์ ๋์ฒดํ ์ ์๋ค.
Navigation์ ๊ตฌ์ฑ์์
- Navigation Graph : ๋ชจ๋ Navigation ๊ด๋ จ ์ ๋ณด๊ฐ ํ๋์ ์ค์ฌ ์์น์ ๋ชจ์ฌ ์๋ XML ๋ฆฌ์์ค์ด๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์ฑ์์ ๊ฐ ์ ์๋ ๋ชจ๋ ํ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ฑ ๋ด์ Fragment๋ฅผ ํ ๋์ ํ์ธํ ์ ์๋ค. Destination ๋ชฉ๋ก์ ๊ฐ๊ณ ์๋ ๋ถ๋ถ.
- NavHost : Navigation Graph์์ ๋์์ ํ์ํ๋ ๋น ์ปจํ ์ด๋. (NavController๋ฅผ ๊ฐ๊ณ ์๋ ์ปจํ ์ด๋) ๋์ ๊ตฌ์ฑ์์์๋ ํ๋๊ทธ๋จผํธ ๋์์ ํ์ํ๋ ๊ธฐ๋ณธ NavHost ๊ตฌํ์ธ NavHostFragment๊ฐ ํฌํจ๋๋ค.
- NavController : NavHost์์ App Navigation์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด. ์ฌ์ฉ์๊ฐ ์ฑ ๋ด์์ ์ด๋ํ ๋ NavHost์์ ๋์ ์ฝํ ์ธ ์ ์ ํ์ ์กฐ์ข ํ๋ ์ญํ ์ ํ๋ค. ์ฆ, Navigation Graph๋ฅผ ๋ค๋ฃจ๋ ๋ถ๋ถ.
=> Navigation Graph์์ ํน์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋ํ ์ง, ํน์ ๋์์ผ๋ก ์ง์ ์ด๋ํ ์ง NavController์๊ฒ ์ ๋ฌํ๊ณ , NavController๊ฐ NavHost์ ์ ์ ํ ๋์์ ํ์ํด์ฃผ๋ ๋ฐฉ์
0. dependency
dependencies {
// Kotlin
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
implementation("androidx.navigation:navigation-ui-ktx:$nav_version")
}
* Safe Args ์ถ๊ฐ (Optional)
// ์ต์์ build.gradle
buildscript {
ext {
nav_version = '2.4.1'
}
repositories {
google()
}
dependencies {
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
}
// app or module build.gradle
plugins {
id 'androidx.navigation.safeargs.kotlin'
}
1. Navigation Graph
๋ชจ๋ ๋ค๋น๊ฒ์ด์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง res/navigation ํด๋์ XML resource ํ์ผ์ด๋ค.
ํ๋ฉด ์ด๋์ ๋ํ ๋ชจ๋ ์ ๋ณด(Action, ํ๋ฉด ์ด๋ ์ ํ๋ผ๋ฏธํฐ, ํ๋ฉด ๋จ์)๋ฅผ ์ ์ํ๋ ๊ณณ์ด๋ค.
๊ฐ๊ฐ์ ์คํฌ๋ฆฐ๋ค์ ๋์(Destination / ๋ชฉ์ ์ง๊ฐ ๋๋ ํ๋์ ํ๋ฉด)์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ๊ณ ์๊ณ , ๊ฐ๊ณ ์ถ์ ๊ณณ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
[ Navigation xml ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ํ๊ทธ ]
- <navigation> : NavGraph์ ๊ธฐ๋ณธ ํ๊ทธ
- <fragment> or <Activity> or <Dialog> ๋ฑ์ Destination
- <action> : ํ๋ฉด ์ด๋์ ๋ํ ์ก์ ์ ์, ๊ทธ๋ํ์์๋ ํ์ดํ๋ก ํํ๋๋ค.
- <argument> : ํ๋ฉด ์ด๋์ ๋ํ ํ๋ผ๋ฏธํฐ ์ ์
- <deeplink> : ๋ฅ๋งํฌ์ ๋ํ ๋ด์ฉ์ ์ ์
[ ์ค์ต ]
1) res > New > Android Resource File
2) File name ์ ๋ ฅ
3) Resource type > Navigation > OK
4) fragment ์์ฑ
5) nav_graph์์ Fragment๋ฅผ ๋๋๊ทธํด์ ๋ค๋ฅธ Fragment์ ์ฐ๊ฒฐ
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_library"
app:startDestination="@id/homeViewPagerFragment">
<fragment
android:id="@+id/homeViewPagerFragment"
android:name="com.example.libraryproject.HomeViewPagerFragment"
android:label="fragment_view_pager"
tools:layout="@layout/fragment_view_pager" >
<action
android:id="@+id/action_homeViewPagerFragment_to_bookDetailFragment2"
app:destination="@id/bookDetailFragment" />
</fragment>
<fragment
android:id="@+id/bookDetailFragment"
android:name="com.example.libraryproject.BookDetailFragment"
android:label="fragment_book_detail"
tools:layout="@layout/fragment_book_detail" >
<action
android:id="@+id/action_bookDetailFragment_to_libraryFragment2"
app:destination="@id/libraryFragment" />
</fragment>
<fragment
android:id="@+id/libraryFragment"
android:name="com.example.libraryproject.LibraryFragment"
android:label="fragment_library"
tools:layout="@layout/fragment_library" />
</navigation>
2. NavHost
Navigation Graph์ ์ ์๋ ํ๋ฉด๋ค์ ๋ณด์ฌ์ฃผ๋ ์ปจํ ์ด๋์ ์ญํ ์ ํ๋ค.
ํ๋ฉด์ด๋์ ๋ํ ์ก์ ์ ๋ชจ๋ NavHost๋ผ๋ Fragment์๊ฒ ์์๋๋ค.
์ผ๋ฐ Fragment์ Name์ NavHostFragment๋ฅผ ์ ์ํด์ฃผ๊ณ , ์ฐ๊ฒฐ๋๋ navGraph๋ ์ ์ํด์ฃผ์ด์ผํ๋ค.
[ ์ค์ต ]
1) activity_main.xml ํ์ผ์ NavHostFragment ์ถ๊ฐ
2) name / defaultNavHost / navGraph ์์ฑ ์ถ๊ฐ
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_library"/>
์ฌ๊ธฐ๊น์ง ํ๋ฉด ์ด์ ํ๋์ ์กํฐ๋นํฐ + ์ฌ๋ฌ ๊ฐ์ ํ๋๊ทธ๋จผํธ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
3. NavController
ํ๋ฉด์ด๋์ ๋ํ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ค.
NavHost์์ ์ป์ ์ ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ํตํด ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ฒํผ์ ํตํด ํ๋ฉด์ ์ด๋ํ๋ ๊ฒฝ์ฐ, ๋ฒํผ์ setOnClickListener๋ฅผ ์ฌ์ฉํด์ฃผ๋ '์ก์ '์ ์ํํ๋ ๊ฒ์ด๋ค.
<!--navController fragment,activity,view์์ find -->
val navController = findNavController()
<!--navController navhost id๋ก ๊ฐ์ ธ์ค๊ธฐ -->
val navController = findNavController(R.id.nav_container)
<!--navController - navhost์์ ๊ฐ์ ธ์ค๊ธฐ -->
val host: NavHostFragment = supportFragmentManager
.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return
val navController = host.navController
binding.toolbar.setNavigationOnClickListener { view ->
view.findNavController().navigateUp()
}
'IT > Android (Kotlin)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android :: MVC, MVP ๊ทธ๋ฆฌ๊ณ MVVM (0) | 2022.03.01 |
---|---|
Android :: Activity, Fragment ์๋ช ์ฃผ๊ธฐ (0) | 2022.03.01 |
Android :: RecyclerView ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์ฌ์ฉ๋ฒ (0) | 2020.06.12 |
Android :: Bottom Navigation์ ViewPager ์ฐ๊ฒฐ (0) | 2020.06.10 |
Android :: SharedPreferences๋ฅผ ์ด์ฉํ ์๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ (0) | 2020.06.10 |