๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฑ| Android/๐Ÿš€ | Jetpack

[Android, Kotlin] Compose UI ์ •๋ฆฌ(7)

by immgga 2023. 4. 16.

์ด์ „ ํฌ์ŠคํŒ…

https://rkdrkd-history.tistory.com/50

 

[Android, Kotlin] Compose UI ์ •๋ฆฌ(6)

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” compose ui๋กœ bottom navigation์„ ๋งŒ๋“œ๋Š” ์˜ˆ์ œ๋ฅผ ์ •๋ฆฌํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด์ „ ํฌ์ŠคํŒ… https://rkdrkd-history.tistory.com/46 [Android, Kotlin] Compose UI ๊ธฐ๋ก(5) ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” compose UI ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ

rkdrkd-history.tistory.com

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ•„์ž๊ฐ€ compose๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋œ ์ •๋ณด๋ฅผ ๋„์ ์—ฌ๋ณด๊ฒ ๋‹ค.

์ด๋ฒˆ์— ์•Œ๊ฒŒ ๋œ ์ •๋ณด๋Š” ์ œ๋ชฉ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํ™”๋ฉด์ „ํ™˜(navigate) ๋„์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

(compose navigate ๋„์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ‰์†Œ์— ์‚ฌ์šฉํ–ˆ๋˜ intent์˜ putextra์™€ ๋น„์Šทํ•˜๋‹ค.)

ํ•„์ž๊ฐ€ ์•„์ง ์ œ๋Œ€๋กœ ์ดํ•ดํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์„ค๋ช…์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์–‘ํ•ด ๋ฐ”๋ž€๋‹ค.

์•„๋ฌดํŠผ ์žก๋‹ด์€ ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ์ง„์งœ๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.


 

1. ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ

ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด ํ™”๋ฉด์˜ ๊ตฌ์„ฑ์ด ์ „๋‹ฌํ•˜๋Š” ์ชฝ๊ณผ ์ „๋‹ฌ๋ฐ›๋Š” ์ชฝ์ด ์žˆ์„ ๊ฑด๋ฐ, ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ชฝ์—์„œ ์ž‘์—…์„ ํ•ด์ฃผ๋„๋ก ํ•˜์ž.

(ํ•„์ž์˜ ๊ฒฝ์šฐ์—๋Š” data class ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ–ˆ์—ˆ๋‹ค.)

 

navController.currentBackStackEntry?.savedStateHandle?.set(key = "key string", value = value)
navController.navigate("route")

key์—๋Š” putExtra ์‚ฌ์šฉํ•  ๋•Œ์ฒ˜๋Ÿผ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ์˜ key๊ฐ’์„ ๋„ฃ๊ณ , value์— ์ž์‹ ์ด ์ง„์งœ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ์ค„์— ์ด๋™ํ•  screen์˜ route๋ฅผ ๋„ฃ๋Š”๋‹ค.

 

(์˜ˆ์‹œ)

navController.currentBackStackEntry?.savedStateHandle?.set(key = "data", value = movieItemData)
navController.navigate(Screen.Detail.route)

 

 

2. ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๊ธฐ

์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ฉด ๋˜๋Š”๋ฐ, ํ•„์ž์˜ ๊ฒฝ์šฐ์—๋Š” navhost ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™”๋‹ค.

composable("route") {
        val data = remember {
            navController.previousBackStackEntry?.savedStateHandle?.get<MovieItemData>("key string")
        }
        // TODO
}

์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ data ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.(๋’ค์˜ key๊ฐ’์€ ์ „๋‹ฌํ•œ key๊ฐ’๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.)

 

(์˜ˆ์‹œ)

composable(Screen.Detail.route) {
    val data = remember {
        navController.previousBackStackEntry?.savedStateHandle?.get<MovieItemData>("data")
    }
    DetailScreen(data)
}

ํ•„์ž์˜ ์˜ˆ์‹œ์—์„œ๋Š” data๋ฅผ ๋ฐ›์•„์™€์„œ detailScreen์—์„œ ํ™œ์šฉํ–ˆ๋‹ค.


 

 

์ •๋ฆฌ

ํ•„์ž๊ฐ€ ์ฒ˜์Œ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ๋Š” ๊ฒ€์ƒ‰ํ•ด๋„ ํ’€๋ ค์žˆ๋Š” ์ •๋ณด๊ฐ€ ๋งŽ์ง€ ์•Š์•„์„œ ์• ๋จน์—ˆ์—ˆ๋Š”๋ฐ, ์–ด๋Š ํ•œ ๋ถ„(?)์˜ ๋„์›€์œผ๋กœ ๋ฌด์‚ฌํžˆ navigate ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.(๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค(๊พธ๋ฒ…))

 

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ

https://velog.io/@zinkiki/AndroidCompose-navigation%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%EC%85%98-%EA%B5%AC%ED%98%84

 

[Android/Compose] navigation/๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌํ˜„

Intent๋ฅผ ์ปดํฌ์ฆˆ์—์„œ์˜ Navigation์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ! Navigation Route MainActivity

velog.io

 

์•„์ง compose์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์ด ์•ˆ ํ’€๋ ค์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ๊ฒ€์ƒ‰ํ•  ๋•Œ์—๋„ ์• ๋จน์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋นจ๋ฆฌ ์ƒ์šฉํ™”๊ฐ€ ์™„๋ฃŒ๋ผ์„œ ๋งŽ์ด ์ •๋ณด๊ฐ€ ํ’€๋ ธ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

728x90

๋Œ“๊ธ€