-
Notifications
You must be signed in to change notification settings - Fork 0
๐ Navigation Component ์ ์ฉ๊ณผ ๊ณ ๋ฏผ
saeyoung Oh edited this page Dec 13, 2023
·
1 revision
ํ๋์ ์กํฐ๋นํฐ ์์์ ํ๋๊ทธ๋จผํธ๊ฐ์ ์ด๋์ ์ง์ํด์ฃผ๋ ๊ฒ์ด ๋ชฉ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
โ activity ๊ฐ ์ด๋ ๋์ ์์์ activity + ์ฌ๋ฌ ๊ฐ์ fragment ๋ก ๊ตฌํํ ์ด์ ?
๐ก ํ์๋ค ๋ชจ๋ Navigation Component ๋ฅผ ๋ง์ด ์ฌ์ฉํด๋ณด์ง ์์ ์ ๋๋ก ๊ฒฝํํด๋ณด๊ณ ์ถ์๊ณ , activity ๋ณด๋ค ๊ฐ๋ฒผ์ด fragment ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ตฌํํ์ฌ ์ค๊ณํ๋
Single Activity Architecture ๋ฅผ ์ ์ฉํด๋ณด๊ณ ์ถ์ด์ ๊ตฌํํด๋ณด์๋ค. ์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ๋ฐํ์ ์๋ฌ๊ฐ ๋งค์ฐ ๋ถ์น์ ํ๊ณ , ํ๋ฉด์ด ๋ง์์ง์๋ก ๊ด๋ฆฌํด์ผ ํ ์ฝ๋๊ฐ
๋์ด๋ ๊ตฌํ ๊ณผ์ ์์ ์ด๋ ค์์ ๊ฒช๊ธฐ๋ ํ๋ค. ํ์ง๋ง ๋์์, ๊ทธ๋ํ๋ก ํ๋ฉด ์ ํ์ ๊ด๋ฆฌํ๋ฉด์ ๋ง์ ํ๋ฉด์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๋ฏ์ด ๊ตฌ์ฑํ ์ ์์๊ณ ,
safe args ๋ popUpTo ์ต์
์ ์ฌ์ฉํ ๋๋ ๊ฐ๋จํ๊ฒ ์ํ๋ ๋์์ ๊ตฌํํ ์ ์์ด์ ํธ๋ฆฌํ๋ค.
โ safe args ์ ์ฉํ ์ด์ ?
๐ก action ์ด ์์๋ ๊ฐ Destination ์ ๋ํด ํด๋์ค๊ฐ ์์ฑ๋๋ค. ์๋๋ผ๋ฉด, action ์์ id ๋ก ์ก์
์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ์ก์
์ ์ ๋ฌํ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง,
๊ฐ์ฒด๋ก ์์ฑํด์ ์ ๋ฌํ๋ฉด ์๋ชป ์ ๋ฌํ ์ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ด ๊ถ์ฅ๋๋ค.
๋ํ fragment ๊ฐ ์ด๋ํ๋ฉด์ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์์ด type ์์ ์ฑ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ safe args ๋ฅผ ์ ์ฉํ์ฌ
navigation ์ ๊ตฌํํ๋ค.
- destination ์ activity / fragment ์ ํด๋น.
- activity ๋ ์ต์ข ์ง์ ์ด ๋ ์๋ ์์ง๋ง, action ์ด ์ถ๋ฐํ ์๋ ์์.
-
pop
์ต์ -
popUpTo
: backstack ์์ ์ด๋๊น์ง ์ด๋ํ ๊ฒ์ธ์ง ๊ฒฐ์ โ ์ค์ ํ destination ์ด ๋์ฌ ๋๊น์ง backstack ์ pop. -
popUpToInclusive
: ์์์ ์ง์ ํ fragment ๋ฅผ pop ํ ์ง ์ฌ๋ถ๋ฅผ boolean ์ผ๋ก ์ค์ .
-
- graph ๋ก๋ถํฐ destination ์ ๋ณด์ฌ์ฃผ๋ ๋น ์ปจํ ์ด๋. frame / container ๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ.
- ์์ฑ
-
android:name
๊ตฌํ ํด๋์ค์ ์ด๋ฆ์ ํฌํจ -
android:navGraph
์์์ ๋ง๋ graph ์ ์ฐ๊ฒฐ -
android:defaultNavHost
true ์ผ ๊ฒฝ์ฐ,NavHostFragment
๊ฐ ์์คํ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ ๊ฐ์ ธ๊ฐ. ์ฆ ์คํ์ ์์ฌ์ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ์ด์ destination ์ผ๋ก ๋์๊ฐ.
-
- NavHost ๊ฐ ์ด๋ฅผ ๊ฐ์ง๊ณ ์์.
- ์ ์ ๊ฐ ์ฑ ๋ด์์ ์ด๋ํ ๋
NavHost
์ ์ปจํ ์ธ ๋ฅผ ์กฐ์ ํจ.NavController
๋NavHost
์๊ฒ ์ ์ ํ ๋ชฉ์ ์ง๋ฅผ ํ์ํด์ฃผ๋ ๊ฒ.
-
menu
ํด๋๋ฅผ ์์ฑํ์ฌ bottom navigation ํ์ผ์ ์์ฑ.
<item
android:id="@+id/nav_setting"
android:icon="@android:drawable/ic_menu_preferences"
android:title="์ค์ "/>
๐ `id` ๋ ๋ฐ๋์ navigation graph ์์ ์ ์ธํ `fragment id` ์ ๋์ผํ๊ฒ ์ค์ ํด์ผ ์ฐ๋๋จ.
-
Navigation ๊ธฐ๋ณธ ์์น
- Up ๋ฒํผ์ผ๋ก ์ฑ์ด ์ข ๋ฃ๋๋ฉด ์๋จ
- app task ์์์ up & back ๋์ผํ๊ฒ ๋์ํด์ผํจ.
-
์ฑ๊ณต์ ์ผ๋ก ๋ค๋ฅธ destination ์ผ๋ก pop back ๋์๋์ง ์ฌ๋ถ๋ฅผ boolean ์ผ๋ก ๋ฐํ
-
popBackStack
- Back ๋ฒํผ์ ์ก์ ์ ํจ
- ์์ fragment ์์ ์๋์ผ๋ก ์ด ๋ฉ์๋๋ฅผ call ํ์ ๋, ์์ fragment ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์. ํ์ง๋ง ๊ฐ ์์ฒด๋ false ๋ฅผ ๋ฐํํ๋ฉด์ ๋ค์ ๋์ ์ ์๋ฌ๋ฅผ ๋ฐ์์ํด
findNavController().popBackStack() // false ๋ฅผ ๋ฐํํ๋ฉด findNavController().getCurrentDestination() // null ์ ๋ฐํํ๋ฉด์ ๋ค์ ๋์์ ์ํฅ์ ์ค
- ์๋ก ๋ฒํผ์์๋
navigateUp
์ฐ๋๊ฒ ์ผ๋ฐ์ ์ด์ง๋ง, ์์ fragment ๊ฐ ์๋๋ฉดpopBackStack
์ฐ๋ ๊ฒฝ์ฐ๋ ์์. ์์ fragment ์์ ์ฌ์ฉ๋ ํ๋ฅ ์ด ์กด์ฌํ๋ค๋ฉด, false ์ธ ๊ฒฝ์ฐ activity ๋ฅผ finish ํด์ฃผ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์์ฑํ๊ธฐ๋ ํจ.
-
navigateUp
-
popBackStack
๊ณผ ๋์ ์์ฒด๋ ๊ฐ์ง๋ง up ์ ์ก์ ์ ํจ - ์์ ๊ฐ์ด ์์ fragment ์์ ์๋์ผ๋ก ์ด ๋ฉ์๋๋ฅผ call ํ์ ๋, ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์. ํ์ง๋ง ๋ค์ ๋์์ ๊ณ์ํด๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์์.
-
-
๐ฌ ํ ํ๊ณ
-
๐โโ๏ธ ๊ฐ์ธ ํ๊ณ