dependencies {
val nav_version = "2.7.7"
implementation("androidx.navigation:navigation-compose:$nav_version")
}
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "profile") {
composable("profile") { Profile( /* ... */ ) }
composable("friendslist") { FriendsList( /* ... */ ) }
// Add more destinations similarly.
}
ํ์ ๊ทธ๋ํ์์ ์ปดํฌ์ ๋ธ๋ก ์ด๋ํ๋ ค๋ฉด NavController.navigate(route)
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ด ์ค๋ฒ๋ก๋๋ฅผ ํตํด navigate()
๋ ๋จ์ผ String ์ธ์๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ route์ด๋ฉฐ ๋์์ ํค ์ญํ ์ ํ๋ค.
navController.navigate("friendslist")
NavController
์ startDestination
์ ์ค์ composable
ํจ์๋ค์ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ฉด์ ๋ค๋น๊ฒ์ด์
๊ทธ๋ํ์ ์ถ๊ฐ๋ค๋น๊ฒ์ด์ ๊ทธ๋ํ : NavHost์ Composable ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ฉด๊ณผ ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ ๋ฐฉ์
NavHost(navController = navController, startDestination = "home") { // NavHost
composable("home") { // NavGraph ์ ์
HomeScreen(onNavigateToDetails = { navController.navigate("details") })
}
composable("details") {
DetailScreen(onNavigateToHome = { navController.navigate("home") })
}
}
NavHost
๋ด๋ถ์์ ์ ์๋๋ฉฐ ๊ฐ composable
ํจ์๋ก ํ๋ฉด๊ณผ ๊ฒฝ๋ก๋ฅผ ๋งคํcomposable("home") { // NavGraph์ ์ผ๋ถ
HomeScreen(onNavigateToDetails = { navController.navigate("details") })
}
composable("details") { // NavGraph์ ์ผ๋ถ
DetailScreen(onNavigateToHome = { navController.navigate("home") })
}
rememberNavController
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑval navController = rememberNavController() // NavController ์์ฑ
์๋๋ก์ด๋ ๊ณต์ ๋ฌธ์์์ ๊ถ์ฅํ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(UDF)์์น์ ๋ฐ๋ผ์ผ ํ๋ค.
์ด๋ฅผ ์ํด์๋ ์ปดํฌ์ ๋ธ์ NavController
๋ฅผ ์ง์ ์ ๋ฌํ์ง ์๊ณ , ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋น๊ฒ์ด์
์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = "home") {
composable("home") { HomeScreen(navController)} // ์ง์ ์ฐธ์กฐ
composable("details") { DetailScreen(navController)} // ์ง์ ์ฐธ์กฐ
}
}
@Composable
fun HomeScreen(navController: NavHostController) { // ์ง์ ์ฐธ์กฐ
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Home Screen")
Button(onClick = { navController.navigate("details") }) { // ์ง์ ์ฐธ์กฐ
Text(text = "Go to Details")
}
}
}
@Composable
fun DetailScreen(navController: NavHostController) { // ์ง์ ์ฐธ์กฐ
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Details Screen")
Button(onClick = { navController.navigate("home") }) { // ์ง์ ์ฐธ์กฐ
Text(text = "Go to Home")
}
}
}
๋ค๋น๊ฒ์ด์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋๋ค ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ก ์์
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home") {
composable("home") {
//๋๋ค ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก
HomeScreen(onNavigateToDetails = { navController.navigate("details")})
}
composable("details") {
//๋๋ค ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก
DetailScreen(onNavigateToHome = { navController.navigate("home")})
}
}
}
@Composable
fun HomeScreen(onNavigateToDetails: () -> Unit) {
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Home Screen")
Button(onClick = onNavigateToDetails) { //๋๋ค ํจ์๋ฅผ ํธ์ถํด ๋ค๋น๊ฒ์ด์
์ฒ๋ฆฌ
Text(text = "Go to Details")
}
}
}
@Composable
fun DetailScreen(onNavigateToHome: () -> Unit) {
Column(modifier = Modifier.fillMaxSize()) {
Text(text = "Detail Screen")
Button(onClick = onNavigateToHome) { //๋๋ค ํจ์๋ฅผ ํธ์ถํด ๋ค๋น๊ฒ์ด์
์ฒ๋ฆฌ
Text(text = "Go to Home")
}
}
}
MyApp
์ปดํฌ์ ๋ธ์๋ NavController
์ธ์คํด์ค๊ฐ ์๋ค.navigate()
ํธ์ถ์ HomeScreen
๊ณผ ๊ฐ์ ํ์ ์ปดํฌ์ ๋ธ์ด ์๋๋ผ ์ฌ๊ธฐ์ ๋ฐ์ํด์ผ ํ๋ค.ใ
ฃProfileScreen
์๋ ํด๋ฆญ ์ ์ฌ์ฉ์๋ฅผ DetailScreen
์ผ๋ก ์ด๋ํ๋ ๋ฒํผ์ด ํฌํจ๋์ด ์๋ค. ๊ทธ๋ฌ๋ navigate()
์์ฒด๋ฅผ ํธ์ถํ์ง๋ ์๋๋ค.onNavigateToDetails
๋งค๊ฐ๋ณ์๋ก ๋
ธ์ถ๋๋ ํจ์๋ฅผ ํธ์ถํ๋ค.MyApp
๊ฐ navigation ๊ทธ๋ํ์ HomeScreen
๋ฅผ ์ถ๊ฐํ๋ฉด onNavigateToDetails
์ ๊ฒฝ์ฐ navigate()
๋ฅผ ํธ์ถํ๋ ๋๋ค๋ฅผ ์ ๋ฌํ๋ค.HomeScreen
๋ฒํผ์ ๋๋ฅผ ๋ details
๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ํ๋ค.๐์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ปดํฌ์ ๋ธ ํจ์๋ NavController
๋ฅผ ์ง์ ์ฐธ์กฐํ์ง ์๊ณ , ๋ค๋น๊ฒ์ด์
์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด๋ฅผ ํตํด ์ปดํฌ์ ๋ธ ํจ์์ ๋
๋ฆฝ์ฑ์ ์ ์งํ๊ณ , ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(UDF) ์์น์ ๋ฐ๋ฅด๊ฒ ๋๋ค.