Skip to content

Compose_Navigation

์ž„ํ˜•์ค€ edited this page Nov 14, 2024 · 1 revision

Compose Navigation

Android Developers Compose๋ฅผ ์ด์šฉํ•œ ํƒ์ƒ‰ | JetPack Compose | Android Developers

Android Developers JetPack Compose Navigation

Compose Navigation์„ ์ ์šฉํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. NavController ๋งŒ๋“ค๊ธฐ
  2. ํƒ์ƒ‰ ๊ทธ๋ž˜ํ”„ ์„ค๊ณ„
  3. ์ปดํฌ์ €๋ธ”๋กœ ์ด๋™

NavController ๋งŒ๋“ค๊ธฐ

NavController๋Š” ์ค‘์•™ ํƒ์ƒ‰ API์ด๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๋Œ€์ƒ์„ ์ถ”์ ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฉ์ ์ง€ ๊ฐ„์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Compose์—์„œ NavController๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด rememberNavController() ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

์ด NavController๋Š” ์ปดํฌ์ €๋ธ” ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ์ฐธ์กฐํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ์ €๋ธ”์ด ์ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋†’์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํƒ์ƒ‰ ๊ทธ๋ž˜ํ”„ ์„ค๊ณ„

Compose์—์„œ๋Š” ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•œ๋‹ค.

๋ฃจํŠธ ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ , ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋Š” ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

@Serializable
object Profile
@Serializable
object FriendsList

val navController = rememberNavController()

NavHost(navController = navController, startDestination = Profile) {
    composable<Profile> { ProfileScreen( /* ... */ ) }
    composable<FriendsList> { FriendsListScreen( /* ... */ ) }
    // Add more destinations similarly.
}

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ์ด๋™ํ•  ์ปดํฌ์ €๋ธ” ๊ฒฝ๋กœ๋ฅผ Profile FriendsList ์ •์˜ํ–ˆ๋‹ค.

๋˜ํ•œ ์ด๋ฅผ ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

NavHost ์ธ์ž์—์„œ๋Š” ๊ธฐ์กด์— ๋งŒ๋“ค์—ˆ๋˜ NavController๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹œ์ž‘ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ–ˆ๋‹ค.

HavHost ์ฝœ๋ฐฑ์—๋Š” ๊ฐ ๊ฒฝ๋กœ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค.

๊ฐ NavHost ์— ์ „๋‹ฌ๋œ ๋žŒ๋‹ค๋Š” ๊ถ๊ตญ์ ์œผ๋กœ HavController.createGraph() ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  NavGraph ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์— ๋™์ž‘์€ ์‹ค์ œ๋กœ ์•„๋ž˜์˜ ๋™์ž‘๊ณผ ๋™์ผํ•˜๋‹ค.

val navGraph by remember(navController) {
  navController.createGraph(startDestination = Profile)) {
    composable<Profile> { ProfileScreen( /* ... */ ) }
    composable<FriendsList> { FriendsListScreen( /* ... */ ) }
  }
}
NavHost(navController, navGraph)

๋งŒ์•ฝ Navigate๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด?

์ธ์ˆ˜ ์ „๋‹ฌ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด์˜ ๋žŒ๋‹ค์˜ Composable์€ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค.

composable(Profile) { ProfileScreen( /* ... */ ) }

์—ฌ๊ธฐ์„œ Composable์˜ ์ธ์ž์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ composable ๋ชจ๋“  ์ธ์ˆ˜๋Š” ๋ฌธ์ž์—ด๋กœ ํŒŒ์‹ฑ๋œ๋‹ค.

์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์„ ์ด ๋ฌธ์ž์—ด ๋’ท ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

์ฆ‰, ๋งŒ์•ฝ Id ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

composable("Profile/{userId}") { ProfileScreen( /* ... */ ) }

์ด ์ „๋‹ฌ ๋ฐ›๋Š” Id๊ฐ’์€ NavBackStackEntry ์—์„œ ์ถ”์ถœํ•ด์•ผ ํ•œ๋‹ค.

composable("profile/{userId}") { backStackEntry ->
    Profile(navController, backStackEntry.arguments?.getString("userId"))
}

์ปดํฌ์ €๋ธ”๋กœ ์ด๋™

์ปดํฌ์ €๋ธ”๋กœ ์ด๋™์€ ๊ฐ„๋‹จํ•˜๋‹ค.

NavController.navigate<T> ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋์ด๋‹ค!

@Serializable
object FriendsList

navController.navigate(route = FriendsList)

โ€ผ๏ธย ์ฃผ์˜ ์‚ฌํ•ญ

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๊ฐ€ ์ƒˆ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ navigate() ์ง์ ‘ ํ˜ธ์ถœํ•˜๋„๋ก NavController ์ฐธ์กฐ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋ฉด ์•ˆ๋œ๋‹ค.ย 

UDF(๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„) ์›์น™์— ๋”ฐ๋ผ NavController ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” navigate ์ด๋ฒคํŠธ๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

@Serializable
object FriendsList

navController.navigate(route = FriendsList, navController)

์ฆ‰, ์œ„์— ์ฒ˜๋Ÿผ navController ์ฐธ์กฐ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜์—ฌ FriendsList ์ปดํฌ์ €๋ธ” ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

composable<Profile> {
    ProfileScreen(
        onNavigateToFriends = { navController.navigate(route = FriendsList) },
        /*...*/
    )
}

์œ„์™€ ๊ฐ™์ด navController.navigate ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

์ข€ ๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ปดํฌ์ €๋ธ”์—์„œ () -> Unit ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

image


๐ŸŽจ ๊ธฐํš ๋ฐ ๋””์ž์ธ


โค๏ธ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ


๐Ÿ“š ๋ฌธ์„œ


๐Ÿ“‘ ๋ฏธํŒ… ๊ธฐ๋ก

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ

ํšŒ์˜๋ก

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ


Clone this wiki locally